數(shù)據(jù)類型使用不當(dāng)會發(fā)生錯誤,給你改了,仔細對比就知道哪里錯。
- #include <reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar aa,bb;
- uint num;
- //定義數(shù)組存儲數(shù)碼管碼值
- uchar code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f};
- uchar arr[2];
- //配置管腳
- sbit dul=P2^6;
- sbit wel=P2^7;
- void delay(uint x);
- void UART_Init();
- void display();
-
- //定義延時函數(shù)
- void delay(uint x)
- {
- uint a,b;
- for(a=0;a<x;a++)
- for(b=0;b<110;b++);
- }
-
- void main()
- {
- UART_Init();
- while(1)
- {
- display();
- }
- }
- void UART_Init()
- {
- TMOD=0x20; //定時器1設(shè)置位 8位自動重載計數(shù)器
- TH1 =0xfd; //設(shè)置波特率為9600
- TL1 =0xfd;
- SM0 = 0;
- SM1 = 1; //串口工作方式1,為10位數(shù)據(jù)異步收發(fā)器
- REN = 1;//允許接收
- EA = 1;
- ES = 1; //把串口中斷打開
- TR1= 1;
- aa=0;
- }
- void UART() interrupt 4
- {
- RI=0;
- arr[aa]=SBUF;
- aa++;
- if(aa==2)
- {
- aa=0;
- num=arr[0]<<8|arr[1];
- }
- }
- void display()
- {
- P0=0x00;//段消隱
- dul=1;
- dul=0;
- switch(bb)
- {
- case 0:
- P0=0xfe;
- wel=1;
- wel=0;
- P0=table[0];
- dul=1;
- dul=0;
- break;
-
- case 1:
- P0=0xfd;
- wel=1;
- wel=0;
- P0=table[num/10000%10];
- dul=1;
- dul=0;
- break;
-
- case 2:
- P0=0xfb;
- wel=1;
- wel=0;
- P0=table[num/1000%10];
- dul=1;
- dul=0;
- break;
- case 3:
- P0=0xf7;
- wel=1;
- wel=0;
- P0=table[num/100%10];
- dul=1;
- dul=0;
- break;
-
- case 4:
- P0=0xef;
- wel=1;
- wel=0;
- P0=table[num/10%10];
- dul=1;
- dul=0;
- break;
-
- case 5:
- P0=0xdf;
- wel=1;
- wel=0;
- P0=table[num%10];
- dul=1;
- dul=0;
- break;
- }
- delay(1);
- bb++;
- if(bb==6)
- bb=0;
- }
復(fù)制代碼 |