数码管为二位共阳数码管,我对引脚的排列方式和一般的有些不同,目的是在PCB上的顶层线更少。另外还算了一下这种接法的段码,在代码里大家可以看下
仿真文件和c源码:
30秒倒计时.zip
(67.42 KB, 售价: 2 E币)
仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
单片机源程序如下:
- #include <reg51.h>
- unsigned char count=0;
- sbit LED_B1=P3^6;
- sbit LED_A1=P3^7;
- unsigned char NSF=30;
- void Init(void)
- {
- TMOD=0x01;
- TH0=(65536-10000)/256;
- TL0=(65536-10000)%256;
- TR0=1;
- ET0=1;
- EA=1;
- }
- void timer0(void) interrupt 1
- {
- TMOD=0x01;
- TH0=(65536-50000)/256;
- TL0=(65536-50000)%256;
- TR0=1;
- ET0=1;
- EA=1;
- count++;
- if(count>19)
- {
- count=0;
- NSF--;
- }
- }
-
- void delayms(unsigned int xms)
- {
- unsigned int i,j;
- for(i=xms;i>0;i--)
- for(j=110;j>0;j--);}
- unsigned char table[]={0x3,0xcf,0x2a,0x4a,0xc6,0x52,0x12,0xcb,0x2,0x42};
- void display1(unsigned char num1,unsigned char num2)
- {
- LED_A1=1;
- P0=table[num1];
-
- delayms(10);
- LED_A1=0;
-
- LED_B1=1;
- P0=table[num2];
-
- delayms(10);
- LED_B1=0;
- }
- void main()
- {
- while(1)
- {
- EA=1;
- Init();
- while(NSF!=0)
- {
- display1(NSF/10,NSF%10);
- delayms(10);
- }
- while(NSF==0)
- {
- NSF=30;
- display1(NSF/10,NSF%10);
- delayms(10);
- }
- }
- }
复制代码
【必读】版权免责声明
1、本主题所有言论和内容纯属会员个人意见,与本论坛立场无关。2、本站对所发内容真实性、客观性、可用性不做任何保证也不负任何责任,网友之间仅出于学习目的进行交流。3、对提供的数字内容不拥有任何权利,其版权归原著者拥有。请勿将该数字内容进行商业交易、转载等行为,该内容只为学习所提供,使用后发生的一切问题与本站无关。 4、本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本网站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。 5、本网站所有软件和资料均为网友推荐收集整理而来,仅供学习用途使用,请务必下载后两小时内删除,禁止商用。6、如有侵犯你版权的,请及时联系我们(电子邮箱1370723259@qq.com)指出,本站将立即改正。
|