电路图 很简单 数码管是共阳的。
程序代码: 也很简单 ,偏偏数码管就是不会亮。引脚显示全是高电平。。
PS:用共阴极数码管能 点亮并稳定动态显示。将下面的位选 段选编码换成共阴的 再把消影的0x00变成0xff就是共阴数码管的代码。这个是成功的。
偏偏换成 共阳的数码管就行不通。。求大神解释 指点!
还有就是 我把中断换成延时程序,共阳数码管也是可以稳定显示的.....
自己对以下代码测试的结果就是只要把 display()放到 中断里面 数码管就完全无法显示,将display()放到中断外虽然不能成功显示,但还是”会闪“
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uchar count,dunum=0,wenum=0;
- sbit dula=P2^6;
- sbit wela=P2^7;
- uchar code tabledu[]={
- 0xc0,0xf9,0xa4,0xb0,
- 0x99,0x92,0x82,0xf8,
- 0x80,0x90,0x88,0x83,
- 0xc6,0xa1,0x86,0x8e};
- uchar code tablewe[]=
- {0x01,0x02,0x04,0x08,
- 0x10,0x20};
- void display();
- void main()
- {
- EA=1;
- ET0=1;
- TMOD=0x10;
- TH1=(65536-500)/256;
- TL1=(65536-500)%256;
- TR0=1;
- while(1)
- {
- if(count==1)
- {
- count=0;
- if(dunum==6)
- dunum=0;
- if(wenum==6)
- wenum=0;
- display();
- dunum++;
- wenum++;
- }
- }
- }
- void tim1() interrupt 3
- {
- TH1=(65536-500)/256;
- TL1=(65536-500)%256;
- count++;
- }
- void display()
- {
- P0=0x00;
- wela=1;
- wela=0;
- P0=tabledu[dunum];
- dula=1;
- dula=0;
- P0=tablewe[wenum];
- wela=1;
- wela=0;
- }
|