snni00 发表于 2019-4-22 08:06 感谢,问题已解决,我改成在打开段选和位选控制之前先给P0赋值就没问题了。 |
wulin 发表于 2019-4-22 11:47 感谢,问题已解决,我改成在打开段选和位选控制之前先给P0赋值就没问题了。 |
| 你想要实现什么效果?这个不说清楚不行的 |
|
动态数码管显示需要1~5ms显示1位,根据数码管显示位数扫描一轮不要超过20ms。改这样试试。 #include<reg52.h> #include<intrins.h> #define uint unsigned int #define uchar unsigned char uchar code tabledu[]={0x06,0x5b,0x4f,0x66,0x6d,0x7d}; //,0x07,0x6f,0x77,0x7c,0x58,0x5e,0x7b,0x71}; uchar code tablewe[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf}; //,0xbf,0x7f}; sbit wela=P2^7; sbit dula=P2^6; uchar num1,num2; uint b; bit a; void init(); void main() { init(); while(1) { if(a==1) { a=0; b++; num1++; if(num1>5) num1=0; if(b>=500) { b=0; num2--; if(num2>5) num2=5; } P0=tablewe[num1]; wela=1; wela=0; P0=tabledu[num2]; dula=1; dula=0; } } } void init() { TMOD=0x10; TH1=(65536-2000)/256; TL1=(65536-2000)%256; EA=1; ET1=1; TR1=1; num1=0; num2=5; // wela=1; // P0=tablewe[num1]; // wela=0; // dula=1; // P0=tabledu[num2]; // dula=0; } void timer1() interrupt 3 { TH1=(65536-2000)/256; TL1=(65536-2000)%256; a=1; } |
| timer1中断里面提取段码译码位选 |