微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 串口通信如何接收0-65536(16进制)之间的任一数

串口通信如何接收0-65536(16进制)之间的任一数

时间:10-02 整理:3721RD 点击:

以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率9600MHz。

  1. /*以16进制发送一个0-65536之间的任一数,当单片机收到后在数码管上动态显示出来,波特率9600。*/
  2. //通讯频率9600 十六进制发送查看数据

  3. #include<reg52.h>
  4. #include<intrins.h>
  5. #define uint unsigned int
  6. #define uchar unsigned char
  7. sbit wela=P2^7;
  8. sbit dula=P2^6;
  9. uchar aa,bb,cc,dd,ee;
  10. uchar code table[]={
  11. 0x3f,0x06,0x5b,0x4f,
  12. 0x66,0x6d,0x7d,0x07,
  13. 0x7f,0x6f,0x77,0x7c,
  14. 0x39,0x5e,0x79,0x71
  15. };
  16. uchar com_step=0,flag=0;
  17. uint num;
  18. void delayms(uint y)
  19. {
  20.   uint x;
  21.   while(y--)
  22.   {
  23.     for(x=110;x>0;x--);
  24.   }
  25. }

  26. void Calculate()
  27. {
  28.   aa=num/10000;
  29.   bb=num/1000%10;
  30.   cc=num/100%10;
  31.   dd=num/10%10;
  32.   ee=num%10;
  33. }

  34. void Display()
  35. {
  36.   dula=1;
  37.   P0=table[aa];
  38.   dula=0;  
  39.   P0=0xff;
  40.   wela=1;
  41.   P0=0xfe;
  42.   wela=0;
  43.   delayms(2);
  44.   
  45.   dula=1;
  46.   P0=table[bb];
  47.   dula=0;  
  48.   P0=0xff;
  49.   wela=1;
  50.   P0=0xfd;
  51.   wela=0;
  52.   delayms(2);
  53.    
  54.   dula=1;
  55.   P0=table[cc];
  56.   dula=0;  
  57.   P0=0xff;
  58.   wela=1;
  59.   P0=0xfb;
  60.   wela=0;
  61.   delayms(2);
  62.   
  63.   dula=1;
  64.   P0=table[dd];
  65.   dula=0;  
  66.   P0=0xf7;
  67.   wela=1;
  68.   P0=0xf7;
  69.   wela=0;
  70.   delayms(2);
  71.   
  72.   dula=1;
  73.   P0=table[ee];
  74.   dula=0;  
  75.   P0=0xff;
  76.   wela=1;
  77.   P0=0xef;
  78.   wela=0;
  79.   delayms(2);
  80. }
  81. void init()
  82. {
  83.   TMOD=0x20;
  84.   TH1=0xFD;
  85.   TL1=0xFD;
  86.   TR1=1;
  87.   REN=1;
  88.   SM0=0;
  89.   SM1=1;
  90.   
  91.   EA=1;
  92.   ES=1;
  93. }
  94. void main()
  95. {
  96.   init();
  97.   while(1)
  98.   {
  99.         if(flag==1) {Calculate(); delayms(100); flag=0; com_step=0; }
  100.         Display();
  101.   }
  102. }
  103. void ser() interrupt 4
  104. {
  105.   RI=0;
  106.   if(com_step==0)
  107.   {
  108.     num=SBUF;
  109.         com_step++;
  110.   }else if(com_step==1)
  111.   {
  112.     num=num*256+SBUF;
  113.         flag=1;
  114.         com_step=0;
  115.   }
  116. }

复制代码

代码测试应该没有多大的问题了。

完全没作用,乱显示的

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top