找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

51單片機的數(shù)碼管顯示程序調(diào)試的一些問題

查看數(shù): 2085 | 評論數(shù): 4 | 收藏 0
關(guān)燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發(fā)布時間: 2021-4-18 20:08

正文摘要:

這是關(guān)于串口通信的一個演示程序,功能是通過計算機發(fā)送數(shù)到單片機以數(shù)碼管范圍是(0-65535)的形式顯示,在演示過程中發(fā)現(xiàn)一到 32767也就是發(fā)送7fff之后的數(shù)據(jù)時數(shù)碼管亂碼 這是7fff數(shù)據(jù)的調(diào)試變量表 ...

回復(fù)

ID:907979 發(fā)表于 2021-4-19 14:26
wulin 發(fā)表于 2021-4-19 07:50
數(shù)據(jù)類型使用不當(dāng)會發(fā)生錯誤,給你改了,仔細對比就知道哪里錯。

謝謝哥,我這就對比調(diào)試一下
ID:213173 發(fā)表于 2021-4-19 07:50

數(shù)據(jù)類型使用不當(dāng)會發(fā)生錯誤,給你改了,仔細對比就知道哪里錯。
  1. #include <reg52.h>

  2. #define uchar unsigned char
  3. #define uint  unsigned int
  4. uchar aa,bb;
  5. uint  num;

  6. //定義數(shù)組存儲數(shù)碼管碼值
  7. uchar code table[]={
  8.         0x3f,0x06,0x5b,0x4f,
  9.         0x66,0x6d,0x7d,0x07,
  10.         0x7f,0x6f};
  11. uchar arr[2];

  12. //配置管腳
  13. sbit dul=P2^6;
  14. sbit wel=P2^7;

  15. void delay(uint x);
  16. void UART_Init();
  17. void display();
  18.       
  19. //定義延時函數(shù)
  20. void delay(uint x)
  21. {
  22.         uint a,b;
  23.         for(a=0;a<x;a++)
  24.                 for(b=0;b<110;b++);
  25. }
  26.       
  27. void main()
  28. {
  29.         UART_Init();
  30.         while(1)
  31.         {
  32.                 display();
  33.         }
  34. }

  35. void UART_Init()
  36. {
  37.         TMOD=0x20;  //定時器1設(shè)置位 8位自動重載計數(shù)器
  38.         TH1 =0xfd;  //設(shè)置波特率為9600
  39.         TL1 =0xfd;
  40.         SM0 = 0;
  41.         SM1 = 1; //串口工作方式1,為10位數(shù)據(jù)異步收發(fā)器
  42.         REN = 1;//允許接收
  43.         EA = 1;
  44.         ES = 1;  //把串口中斷打開
  45.         TR1= 1;
  46.         aa=0;
  47. }

  48. void UART() interrupt 4
  49. {
  50.         RI=0;
  51.         arr[aa]=SBUF;       
  52.         aa++;
  53.         if(aa==2)
  54.         {
  55.                 aa=0;
  56.                 num=arr[0]<<8|arr[1];      
  57.         }
  58. }

  59. void display()
  60. {
  61.         P0=0x00;//段消隱
  62.         dul=1;
  63.         dul=0;
  64.         switch(bb)
  65.         {               
  66.                 case 0:
  67.                 P0=0xfe;
  68.                 wel=1;       
  69.                 wel=0;
  70.                 P0=table[0];
  71.                 dul=1;
  72.                 dul=0;
  73.                 break;
  74.        
  75.                 case 1:
  76.                 P0=0xfd;
  77.                 wel=1;
  78.                 wel=0;
  79.                 P0=table[num/10000%10];
  80.                 dul=1;
  81.                 dul=0;
  82.                 break;
  83.        
  84.                 case 2:
  85.                 P0=0xfb;
  86.                 wel=1;
  87.                 wel=0;
  88.                 P0=table[num/1000%10];
  89.                 dul=1;
  90.                 dul=0;
  91.                 break;

  92.                 case 3:       
  93.                 P0=0xf7;
  94.                 wel=1;
  95.                 wel=0;
  96.                 P0=table[num/100%10];
  97.                 dul=1;
  98.                 dul=0;
  99.                 break;
  100.        
  101.                 case 4:
  102.                 P0=0xef;
  103.                 wel=1;
  104.                 wel=0;
  105.                 P0=table[num/10%10];
  106.                 dul=1;
  107.                 dul=0;
  108.                 break;
  109.        
  110.                 case 5:
  111.                 P0=0xdf;
  112.                 wel=1;
  113.                 wel=0;
  114.                 P0=table[num%10];
  115.                 dul=1;
  116.                 dul=0;
  117.                 break;
  118.         }
  119.         delay(1);
  120.         bb++;
  121.         if(bb==6)
  122.                 bb=0;
  123. }
復(fù)制代碼
ID:814525 發(fā)表于 2021-4-18 23:16
#define uchar unsigned char;
#define uint  unsigned int ;
宏定義錯誤,后面;號去掉。
ID:907979 發(fā)表于 2021-4-18 22:27
有點懵了

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表