- 博客(41)
- 资源 (19)
- 收藏
- 关注
原创 ubuntu16开发准备工作
下面只总结个人的开发经验,本人热爱物联网开发,可能这个只适合部分人,不喜勿喷。查询版本sudo lsb_release -a修改密码sudo passwd有些ubuntu不支持root登陆,需要启动root登陆sudo vi /etc/sshd_configPermitRootLogin项中的prohibit-password改为yessudo service s...
2019-03-24 11:06:45
268
原创 GPRS的AT指令解析
玩过GPRS模块的朋友一般都知道常见的模块都是以"\r\n"两个字节为结束符,本人工作以前从事过GRPS项目开发过,当时还是刚毕业不久,对于AT指令集解析老是老大难,当时也没借鉴网上代码,都是自己硬头皮去调试,现在回想起来当时太幼稚了。前些阵子,看了下数据结构KMP算法,发现当初自己的代码效率太低了,对KMP算法有兴趣的朋友可以去了解,在这里,我主要用的函数是strstr,在字符串中找其子字符串,
2015-10-22 22:34:56
8989
原创 vc udp客户端异步通讯类封装
本章讲简单共享UDP异步通讯例程,udp是一种无连接、不保证数据是否传递成功,比起tcp通讯,它优势是传输数据快,因为它忽略了可靠传输机制。所谓异步就是接受数据的时候不会产生阻塞效果,函数要不采用回调机制,要不就是直接返回。工程是用基于VS2010 MFC下的。新建通讯类UDPClientClass.h#include #define UDP_READ WM_USER + 3#
2015-09-12 18:07:58
1929
原创 vc 串口通讯类封装
上章封装了usb hid通讯类,本章讲来封装串口通讯类,采用的是同步机制。本工程是基于vs2010 mfc写的,工程名CommExample.新建CommClass.h头文件,里面代码:#pragma once#include "stdafx.h"#include#include #define DEFAULT_BAUDRATE 115200#define DEFAULT_PAR
2015-08-22 10:17:50
3515
原创 vc USB的HID通讯类封装
从事嵌入式方面,会点上位机会事半功倍,总体而言,一个串口,网口,usb通讯用到的比较多,这方面的资料网上也很多,但是总体而言零零碎碎,不算太齐全。 本问讲解的是usb hid类的封装,该例程的上位机可以和圈圈的开发板配套使用。在这里,我们用到的库是hidapi.lib,这个网上有下载,到时本人也提供一份。圈圈上位机的usb hid通讯接口看起来有些零碎杂乱,对于新手而言,看起来很
2015-08-20 15:03:37
10051
3
原创 串口网口数据帧解析(支持连包、断传、错误数据过滤)
嵌入式系统中,关于数据接受部分确实思考了很多,下面总结下个人经验。 关于串口传输,个人觉得采用modbus协议来接受数据是比较合理的,采用3.5char字符的超时机制,接受的时候如果判断超时,就当作一帧数据进行处理,所以这种情况,帧格式没有那么讲解,发送和超时机制弄好就行。 第二种网口用的比较多,串口也用的上,什么情况下用的上呢,当发送的数据没有固定的格式和长度
2015-05-20 18:54:12
9447
原创 modbus协议crc校验
数据校验是数据传输必不可少的一部分,主要目的就是防止数据传输过程中出现差错。本文主要根据原理实现它的核心代码。预置1个16位的寄存器为十六进制FFFF(全1),此寄存器为CRC寄存器把第一个8位二进制数据(即通讯信息帧的第一个字节)与16位的CRC寄存器的低八位相异或,吧结果存放于CRC寄存器。把CRC寄存器的内容右移一位(朝低位)用0填补最高位,并检测右移后的移出位。
2015-05-07 18:48:48
5563
原创 横向纵向的5*7字库
对于较小的显示屏而言,对字库的显示有所苛刻,这里我们用到的是5*7的字库,不过终于找到了一个,是纵向的,与我所用的接口有所不符合,所以我转换了下,变成了横向的了。这里贴出代码,及其新的横向字库。代码在QT的控制台上缩写,之前都是VC控制台写的。#include /****************************************************************
2015-04-29 11:02:08
1735
原创 C语言实现比特位数组在目标空间左右居中对齐三种方式
在LED行业中,一般一个灯亮或者不亮用一个bit位来表示(这里就不谈七彩或者灰度控制卡),现在加入我们屏幕大小是128点,相当于宽度16个字节,如果我们让两个汉字居中显示(两个汉字占宽度4个字节),轻轻松松就可以算出如果要实现居中,只要偏移(16 - 4) / 2 = 6个字节宽度,当然这里我们都是假象的理想情况,假如需要显示的字符宽度不是固定并且显示内容也经常变化,这种情况下,无法手动计算。本文
2015-04-28 16:20:40
2421
原创 提取字节中间的n个bit位
试想,假如让你从一个字节中c中起始位置为s,提取长度为l的bit,用最简单的方法提取,可能你会想到宏定义或者函数。就不饶了,思来想去,最后采用创建一个二维数组的查表方法。表如下:const unsigned char Get_Middle_Byte[8][9] = { 0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0x00
2015-04-22 22:48:30
5112
原创 hex文件转换为bin文件C语言实现
上一章讲解的是bin文件转化为hex文件,本文主要是贴出hex文件转bin文件的代码:新建hex2bin.h#ifndef HEX2BIN_H#define HEX2BIN_Htypedef unsigned char uint8_t;typedef unsigned short uint16_t;typedef unsigned long uint32_t;#def...
2015-04-19 20:55:46
16033
5
原创 bin文件转换为hex文件C语言实现
对于嵌入式而言,hex文件可能大家再熟悉不过了,对,我们大学时学习的51单片机编写的代码在keil上编译后就生成了hex文件。那bin文件又是什么意思呢,它又和hex文件的区别在哪?这也不是本文的重点,下面简单的描述下:最通俗的来讲,hex是带地址的,用下载器下载时,不需要设置偏移地址,它是文件流格式的,都是标准的ASCII码。而bin文件是不带地址的,全部是二进制数据流,打住一下,其实就是我
2015-04-19 19:25:22
16836
4
原创 宏定义神级用法-调试信息便捷开关
大家编写程序的时候,一般都会有调试信息,这些调试信息一般长期伴随着,后来要发布的时候发那些不需要的调试信息给删除掉,如果是一个有丰富的经验人,是采用一个宏定义的开关来决定是否启动这些打印信息。代码如下: #include <stdio.h>/***********************************************************...
2015-04-03 10:05:06
2459
原创 C语言实现双字节在数组中按比特位移动
先说一下应用场合,在LED点阵显示屏中,为了节省flash空间,常用一个bit位来标记哪个灯是否点亮。为了做出比较炫的效果,比如16 * 16像素gif动画边边移动边跳跃。就应用到该思想。 双字节是16bit位,数组的bit位是数组长度乘以8(类型指的是uint8_t),比如uint8_t a[5]长度则是5 * 8 = 40。该函数的思想就是这双字节的16bit位在在数组a[5
2015-03-11 15:57:21
1831
原创 数组比特位循环左移和右移
下面直接给出代码,详细请看代码#include typedef unsigned char uint8_t;typedef unsigned short uint16_t;uint8_t RotateLeft(uint8_t *p, uint8_t len){ uint8_t valBit; if (!len) return 0; len--; valBit =
2015-01-24 10:25:26
3243
原创 CDSN上一页下一页功能模仿
从后台读取记录,如果数据过多,就需要划分多页去显示,本章就是模仿CDSN来实现该功能的,采用asp动态语言实现的,求喷我,css这部分我完全是copy过来的,只改了一点,我主要完成的是asp后面的代码。本章也是做一个记录,方便后面项目中使用。新建pagelist.css文件:/* CSS Document */.pagelist{clear:both;padding:15px 0;col
2015-01-11 22:28:22
2009
原创 QT解析JSON
有时应用程序需要加载数据库中有用数据,目前交主流的就是动态语言创建JSON数据格式,然后应用程序可以解析。1、在pro文件中添加script,如右: QT += script2、需要添加头文件#include3、代码如下,代码str1为json数组,str2为json单个对象的字符串。#include "json.h"#include #include int main(in
2015-01-07 13:40:03
775
原创 LED循环播放节目
在LED行业,一般都会有多个节目显示,假如现在有10节目,里面的节目数据可能会为空或者不为空,每点击一下切换节目按钮,就切换下一条节目。当然,可以选择播放指定的节目,也可以循环播放所有的节目。当我们选择了循环播放节目的时候,加入1、3、5、7、9都存在节目,其他的节目为空,这里我们就希望,先播放第1条节目,然后播放第三条节目,之后按照这个顺序播放所有后续的节目,播放完毕后,又切换到第一条节目,这样
2014-12-20 14:32:24
3673
原创 位操作赋值与清零
#include #define SetBit(c, n) c |= (1 << n)#define ClrBit(c, n) c &= ~(1 << n)void main(){ unsigned char t = 0x00; printf("t = %02x\n", t); SetBit(t, 2); printf("t = %02x\n", t); ClrBit(t,
2014-09-16 17:44:05
1105
原创 自动识别当前语言系统
#include #include using namespace std;int main(){ unsigned short cid = GetSystemDefaultLCID(); switch (cid){ case 0x0804: cout << "简体中文" << endl; break; case 0x0404: cout << "繁体系统" << en
2014-08-29 13:57:03
1611
原创 数据结构之顺序结构线性表之操作
#includetypedef int ElemType;typedef int Status;#define MAXSIZE 5#define OK 1#define ERROR 0typedef struct{ ElemType data[MAXSIZE]; int length;}SqList;//顺序结构的线性表初始化void InitSqList(SqList *
2013-11-22 14:05:22
1114
原创 数据结构之二叉树创建及其遍历
还记得N年想在全盘电脑寻找一个文件,当时看那代码晦涩难懂,后来不了了之,最近复习了下二叉树,现在感觉全盘寻找文件不是想象的那么复杂。#include#include#includetypedef char TElemType;typedef struct SBiTNode{ TElemType data; struct SBiTNode *lchild,*rchild;
2013-11-13 11:06:29
3587
1
原创 数据结构之堆栈操作
#includetypedef int ElemType;typedef int STATUS;#define STACKSIZE 5#define OK 1#define ERROR 0typedef struct{ int top; int data[STACKSIZE];}Stack;//堆栈初始化void StackInit(Stack *S){ S->top=
2013-11-11 16:00:40
1403
原创 数据结构之循环队列操作
#includetypedef int ElemType;typedef int STATUS;#define MAXSIZE 5#define OK 1#define ERROR 0typedef struct{ int data[MAXSIZE]; int front; int rear;}Sequeue;//循环队列初始化void InitSequeue(Sequeu
2013-11-11 15:58:52
980
原创 htonl、htons、ntohl、ntohs函数实现
有一下几点注意事项: 1、网络数据一般都是以大端模式进行传输的; 2、#includetypedef unsigned short uint16;typedef unsigned long uint32;//短整形高低字节交换#define Swap16(A) ((((uint16)(A) & 0xff00) >> 8) | (((uint16)(A
2013-11-06 17:44:08
4732
原创 VC 控制windows自带计算器做加法运算
本程序控制windows自带计算器模拟从1加到100,直接源码。#include#include using namespace std;//分别为数字键、+、=与计算器左上角的相对位置POINT point[12]={ {310,240},//0 {310,210},//1 {350,210},//2 {390,210},//3 {310,180},//4 {350
2013-11-04 09:31:46
1114
原创 VC 获取鼠标当前位置坐标和RGB
下面直接给出代码,至于相应的API函数请参考百度文库。#include#include using namespace std;int main(){ POINT point; unsigned long rgb; HDC scr; while(1) { if(GetAsyncKeyState(VK_F8) & 0x8000) //按下F8 { scr
2013-11-02 15:02:02
7016
原创 统计单字节、多字节bit位长度
#include//统计一个字节bit为1的个数unsigned char CountBit(unsigned char value){ unsigned char i=0; unsigned char count=0; while(i<8) { if(value & 0x01) { count++; } value>>=1; i++; } retur
2013-10-29 10:06:53
1202
原创 宏控制打印信息输出
#include#define DEBUG 0//如果DEBUG=0 关闭所有打印信息//如果DEBUG=1 打开所有打印信息#if DEBUG #define debug(arg) printf(arg) #define debug_1(arg,one) printf(arg,one) #define debug_2(arg,one,two) printf(arg,on
2013-10-28 11:58:58
1289
原创 VC winsock客户端多线程收发数据
这里是直接在dos窗口输入数据,发送出去,因此数据是可见类型的,当然也可以是不可见的,以字节流的形式发送出去没有问题,在此贴出代码#include #include using namespace std;#pragma comment(lib,"ws2_32.lib") //以静态方式加载库#define IP "121.199.9.233" //IP地址#define PO
2013-08-14 19:04:39
3592
原创 VC 多线程异步方式操作串口
#include#include#include using namespace std;DWORD WINAPI CommSend(LPVOID lpParameter); DWORD WINAPI CommReceive(LPVOID lpParameter); OVERLAPPED overRead,overWrite; HANDLE m_hCom;int m
2013-08-14 16:43:43
2332
原创 VC 多线程同步方式操作串口
#include#includeusing namespace std;DWORD WINAPI CommReceive(LPVOID lpParameter);DWORD WINAPI CommSend(LPVOID lpParameter);HANDLE hwbEvent;HANDLE m_hCom;int main(){ DCB dcb; //打开串口 m_hCom=C
2013-08-13 16:24:02
2506
原创 C 语言大小端模式判断
所谓大端模式是数据的高字节部分存放在低地址上,数据的低字节部分存放在高地址部分;小端模式刚好相反,数据的低字节部分存放在低地址上,数据的高字节部分存放在高地址部分。下面直接贴出查询本机系统是大小端模式的代码,该代码基于的一个准则是:数组的下标越大它对应的元素的地址就越大,就如c[1]的地址大于c[0]的地址;同时,在共用体中,它里面的各变量的地址都是相同的,也相当于c[0]和myLong的地址相当
2013-06-06 22:40:38
1346
原创 C语言 获取汉字unicode和utf-8编码
就VC而言,汉字储存一般都是以国标码形式存放在电脑上的,要想查询一个汉字的unicode编码,可以在一个字符串前面加一个‘L,也相当于让该汉字以unicode编码形式存放。 unicode编码与utf-8编码之间的关系是什么,其实两者之间,个人感觉,utf-8编码是unicode编码的具体实现。两者之间的对应关系如下所示,可以看到。当一个字符的unicode编码在0x00
2013-06-06 13:36:33
9327
2
原创 C语言 获取汉字机内码、区位码、国际码
至于什么是机内码、区位码、国际码,百度谷歌一大堆,下面直接给代码#includevoid main(void){ unsigned char temp[2]; scanf("%s",temp); printf("机内码高字节是0x%.2x\n",temp[0]); printf("机内码低字节是0x%.2x\n",temp[1]); printf("区位码区码是%2
2013-06-05 16:15:19
9615
STM8S001J3最小工程.rar
2019-06-06
STM32F1 多功能按键识别
2019-04-28
SYN480R 433MHz 315MHz参考电路
2018-12-18
LIS3DH中英文文档和测试代码
2018-10-23
STM32使用YModem协议进行IAP串口升级
2018-08-28
DES加解密算法
2018-07-31
ESP8266 WIFI和串口透传代码
2018-07-30
ucos+ucgui移植到arm9(s3c2240)
2012-12-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人