调试用数码管驱动模块
1.概述
调试用数码管驱动模块才用了简单的单线制
RS232单向传送协议,波特率固定为38400.
模块可接受指令和数据。用户端只要按固定的格式传送数据流(数据为连续两个字节的RAM参数内容,)就可以完成想要的显示。方便用于产品开发调试以及学生完成课程设计等。
端口定义:
VDD, 接测试板的电源正
GND, 接测试板的电源地
DOUT, 接测试板的信号输出,显示模块的数据输入端
工作电压范围:3.3~5.5V, 注意超过5.5V,可能导致模块永久损坏,无法恢复。
可单独控制某一位的亮灭;
可显示16进制数,最大值FFFF;
可显示10进制数,最大值9999。扩展显示,可显示65535,采用滚动模式显示;
2.常用指令介绍:
控制数据流按固定的5字节格式,前面2字节为命令字,中间两个字节为数据,最后一个字节为前4个字节的校验和。也就是说数据流才用了和校验的方式进行真伪判断。
A.控制指令:
控制指令,主要是通过指令告知显示模块,接收的目标数据及显示数据的类型。类型分10进制和16进制。该模块在使用之前,需要根据用户的使用情况对传输数据的进制模式和显示数据的进制模式做一次声明。模块默认的模式为16进制传输方式和10进制显示模式。用户可才用默认模式做显示,以减少对显示模块的初始化设置。
数据传输显示控制指令的数据格式为:0x55+0xaa+传送数据类型+显示数据类型+校验和;
数据类型解释:
01,表示字符格式,该格式保留此版本未被才用。
02,表示16进制数,16进制数不方便观察,但是两个字节可以传输更大的数据范围。4位数码管显示的数据范围也会更大,为0~ffff, 即十进制数范围为0~65535。
03,表示10进制数,10进制数据显示更为直观,但是4个数码管显示的数据范围则缩小很多,数据范围为0~9999。表示接收到的数据为10进制的数据,如果用十进制显示数据,该数据就不需要做十进制转换处理。
模块当前版本可接受三种传输及显示模式。
1.16进制传输16进制显示;
2.16进制传输10进制显示;
3.10进制传输10进制显示;
4.不支持10进制传输16进制显示的方式。
显示控制指令:0x55+0xcc+0x0y+0x0x+校验和。其中y是4位二进制数,分别控制对应位的数码管小数点是否需要点亮。x也是4位二进制数,分别用1表示点亮,0表示关闭显示。4个二进制位控制4个数码管。
B.数据传输指令:
数据格式:0x55+0xbb+数据1+数据2+校验和;
1.0x55+0xbb,头码标志;
2.数据1,高字节;
3.数据2,低字节;
4.数据流的校验和;
例如用户需要将0x1234,传输给显示模块,并以16进制显示。需要两串数据流控制。
1.先对显示模块初始化,根据要求,此条有时可省
控制指令0x55+0xaa+0x02+0x02+04, 04为校验和的低8位。
2.再做数据传输
传输指令0x55+0xbb+0x12+0x34+56, 56为校验和的低8位。
用户如果想显示12位AD转换的值,并用10进制显示,操作如下:
1. 先对显示模块初始化,根据要求,此条有时可省
控制指令0x55+0xaa+0x02+0x03+04, 05为校验和的低8位。
2.再做数据传输,
传输指令0x55+0xbb+数据高位+数据地位+校验和。
C.扩展显示指令:
A.乘积结果显示:
扩展显示指令为乘积显示指令,这种方式可以最直观的观察系统检测的物理参数。
比如我们AD采集的量化值,反映的具体物理量,多少毫伏电压mV,多少毫安电流mI等,
这时是需要用量化值乘以某个系数来体现。为了方便,本系统只提供最大0xffff的10进制显示范围,即00000~65535,扩展显示默认的数据都是16进制格式的。
扩展指令的命令格式如下:
0x55+0xc0+数据h+数据l+校验和, 传送一个乘数因子A,一般来说,这个是一个12位以内的AD采集的量化值;
0x55+0xdx+数据h+数据l+校验和, 传送另一个常数因子B,x表示因子的小数点尾数,这个是将AD量化后,经过电路转换对应的具体物理量,显示模块必须得到一次常数设置后,才能正常显示乘积的结果。。
比如当我们的AD转换的参考电压为3.3V时,如果要求因子B对应的毫伏关系,就看AD是多少位精度的了,如果是8位,每个AD量化值对应的毫伏关系则为3300/255=19.4118;如果AD的精度是12,则每个AD量化值对应的毫伏关系是3300/4096=0.805664。
使用扩展显示方式时,一定要先传输乘数因子B,乘数因子B,每次使用时,传输一次即可。这样可以减少主控芯片的数据传输压力。并请留意扩展显示的数据范围为0000~65535
以3.3V的系统举例显示AD采集数据,怎么量化为毫伏值。所采用的AD精度为12位,则每一个AD采集值,对应0.805664毫伏。将0.805664转化为8位二进制数小数的结果为00CE。
所以第一步需要,将这个系数告知显示模块。
指令0x55+0xd8+0x00+0xce+0x32 ,数据流设定参数;
再送一组AD结果:
0x55+0xc0+0x07+0xff+0x1b, 这样就可以得到你想直观看到的测试结果了。
B.除法商数显示:
利用该种显示方法,可以轻松得出,单片机利用内部参考电压做AD转换标准时,所得到的结果显示,利用十进制显示结果,效果非常直观。比如在应广带AD的单片机中,常有1.2V的内置参考电压,很多应用,利用这个参考电压,就可以反推VDD的电压值情况。为了尽量避免小数参与运算,以毫伏表示。 若AD为8位精度的话,此时VDD = 1200*255/AD转换结果=306000/ad结果=04AB50/ad结果;若12位AD精度 VDD = 1200*4095/ad结果=4914000/ad结果=4AFB50/ad结果。有了这种显示,单片机系统检测的数据对不对,就很容易通过万用表来校对了。
因为被除数的数值比较大,一般需要三个字节来表示。除法商数的显示指令为
0xdd+被除数高字节+被除数中间字节+被除数低字节+校验和;
0xdc+0x00+ad结果高4位+ad结果低8位+校验和
点击进入淘宝快速预定通道, 通道位置:淘宝首页分类栏---开发工---仿真器下面:
调试用参考程序,系统时钟4MHz,其他始终速率,请自行调整时序:
//指令周期延时子程序,
void delay_5nop(void)
{
goto $+1;
nop;
nop;
}
//a_delay,
//input a ,
//function a*4t
void a_delay(void)
{
nop;
dzsn a
goto $-2
}
void rs232_tx_pro(void)
{
byte byte_cnt;
g_word = fllow;
byte_cnt = 0;
while(byte_cnt<5)
{
a = *g_word;
UART_Send();
delay_5nop();
byte_cnt++;
g_word = fllow;
g_word += byte_cnt;
}
}
//单个字节发送,输入入口A
//该程序是假定系统时钟为4M时的指令时序参考。
static void UART_Send (void)
{
BYTE cnt;
BYTE UART_Data_Out;
disgint;
UART_Data_Out = A;
// Start Bit
set0 UART_Out; // 1
cnt = 8; // 2 ~ 3
mov a, 24;
call a_delay;
bit_send:
sr UART_Data_Out; // 1a
t1sn CF // 2a
goto send_0_bit // 3b
set1 UART_Out // 3a
nop; // 4a
nop
nop
bit_delay:
mov a, 24 // 5a
call a_delay // 6a
dzsn cnt // 7a
goto bit_send // 8a
set1 UART_Out // 9a
mov a, 25 //
call a_delay
engint;
return
//============
send_0_bit:
set0 UART_Out //5b
goto bit_delay //7b
}
欢迎关注微信公共号,一起交流应广单片机:
|