#include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit XIANSHI=P1^0; sbit WEIZHI=P2^0; sbit KEYSCAN=P3^0; uchar code table[] ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e}; uchar code weizhi[] ={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; int shuzhi=76543210; void DelayMS(uint x) { uchar i; while(x--) { for(i=100;i>0;i--); } } void display() { int i,t=0; int ge,shi,bai,qian,wan,shiwan,baiwan,qianwan; ge=shuzhi%10; shi=(shuzhi/10)%10; bai=(shuzhi/100)%10; qian=(shuzhi/1000)%10; wan=(shuzhi/10000)%10; shiwan=(shuzhi/100000)%10; baiwan=(shuzhi/1000000)%10; qianwan=(shuzhi/10000000)%10; for(i=1;i<9;i++) { switch(i) { case 1:t=ge; break; case 2:t=shi; break; case 3:t=bai; break; case 4:t=qian; break; case 5:t=wan; break; case 6:t=shiwan; break; case 7:t=baiwan; break; case 8:t=qianwan; break; } P1=table[t]; P2=weizhi[i]; DelayMS(2); P1=0XFF; DelayMS(2); } } void keyscan() { if(P3^2==0) { DelayMS(10); if(P3^2==1) { shuzhi=shuzhi+1; } } if(P3^3==0) { DelayMS(10); if(P3^3==1) { shuzhi=shuzhi-1; } } } void main() { while(1) { display(); //keyscan(); } }我这个程序为什么数码管乱码
时间: 2024-04-11 09:30:55 浏览: 360
Keil 中头文件INTRINS.H的作用
根据您提供的代码,数码管乱码的原因可能是以下几点:
1. 数码管显示的位选和段选没有正确设置:在 `display()` 函数中,您使用 `P2` 寄存器来控制位选,但是在代码中没有对 `P2` 进行初始化。请确保 `P2` 的初始状态正确,以便正确选择位选。
2. 数码管显示的延时不正确:在 `display()` 函数中,您使用了 `DelayMS(2)` 来延时,但是具体延时的时间取决于您的实际硬件情况。请根据实际情况调整延时的时间,确保数码管能够正常显示。
3. 数码管显示的段选数据不正确:在 `display()` 函数中,根据位数选择了对应的数字存储在 `t` 变量中,但是没有确保 `t` 的值在正确的范围内(0-15)。请确保 `t` 的值在正确的范围内,以便正确选择段选。
4. 输入的整数超出数码管可以显示的范围:请确保输入的整数在数码管可以显示的范围内(0-99999999)。
请检查以上几点,并根据实际情况进行调整和修正。如果问题仍然存在,请提供更多关于具体问题的信息,以便我能够更好地帮助您解决问题。
阅读全文