串口通信如何接收0-65536(16进制)之间的任一数
时间:10-02
整理:3721RD
点击:
以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率9600MHz。
- /*以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率9600。*/
- //通讯频率9600 十六进制发送查看数据
- #include<reg52.h>
- #include<intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- sbit wela=P2^7;
- sbit dula=P2^6;
- uchar aa,bb,cc,dd,ee;
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71
- };
- uchar com_step=0,flag=0;
- uint num;
- void delayms(uint y)
- {
- uint x;
- while(y--)
- {
- for(x=110;x>0;x--);
- }
- }
- void Calculate()
- {
- aa=num/10000;
- bb=num/1000%10;
- cc=num/100%10;
- dd=num/10%10;
- ee=num%10;
- }
- void Display()
- {
- dula=1;
- P0=table[aa];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfe;
- wela=0;
- delayms(2);
-
- dula=1;
- P0=table[bb];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfd;
- wela=0;
- delayms(2);
-
- dula=1;
- P0=table[cc];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xfb;
- wela=0;
- delayms(2);
-
- dula=1;
- P0=table[dd];
- dula=0;
- P0=0xf7;
- wela=1;
- P0=0xf7;
- wela=0;
- delayms(2);
-
- dula=1;
- P0=table[ee];
- dula=0;
- P0=0xff;
- wela=1;
- P0=0xef;
- wela=0;
- delayms(2);
- }
- void init()
- {
- TMOD=0x20;
- TH1=0xFD;
- TL1=0xFD;
- TR1=1;
- REN=1;
- SM0=0;
- SM1=1;
-
- EA=1;
- ES=1;
- }
- void main()
- {
- init();
- while(1)
- {
- if(flag==1) {Calculate(); delayms(100); flag=0; com_step=0; }
- Display();
- }
- }
- void ser() interrupt 4
- {
- RI=0;
- if(com_step==0)
- {
- num=SBUF;
- com_step++;
- }else if(com_step==1)
- {
- num=num*256+SBUF;
- flag=1;
- com_step=0;
- }
- }
完全没作用,乱显示的
