白钻会员
主题
帖子
积分54909
阅读权限50
注册时间2010-5-23
最后登录1970-1-1
在线时间 小时
|
本帖最后由 benli 于 2014-8-17 23:32 编辑
单独把显示部分独立出来还是这样
再发个视频
http://v.youku.com/v_show/id_XNzU2MzU1MzQ0.html
硬件电路结构
测试程序- #include <REG52.H>
- #include <intrins.h>
- #define uint unsigned int
- #define uchar unsigned char
- #define NOP _nop_ ()
- #define NOP3 _nop_(); _nop_(); _nop_()
- #define Duan P2
- sfr T2MOD = 0xC9;
- sfr P4 = 0xe8;
- uchar code Num[]={ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,};
- //uchar code Num[]={1,2,4,8,16,32,64,128,};
- uchar a,b,c,d;
- char Hour,Sec;
- char Min=10;
- bit Shan1,Shan2; //闪烁标志 1Hz/2Hz
- sbit SMG1= P1^6; //时十位
- sbit SMG2= P1^7; //时个位
- sbit SMG3= P3^6; //分十位
- sbit SMG4= P3^7; //分个位
- sbit DP = P4^0; //小数点
- sbit Maohao=P1^2; //冒号
- void Delay(uint x) //延时子函数 50us
- {
- uint i,j;
- for(i=x;i>0;i--) //yanshi x10us
- for(j=15;j>0;j--);
- }
-
- void Xianshi() /*显示扫描*/
- {
- Duan=Num[Sec/10]; //段码
- SMG1=1; //位开
- Delay(12);
- SMG1=0; //位关
- Duan=0;
- Delay(20);
-
- Duan=Num[Sec%10];
- SMG2=1;
- DP=Shan1;
- Delay(12);
- SMG2=0;
- Duan=0;
- DP=0;
- Delay(20);
- Duan=Num[Min/10];
- SMG3=1;
- Delay(12);
- SMG3=0;
- Duan=0;
- Delay(20);
- Duan=Num[Min%10];
- SMG4=1;
- Delay(12);
- SMG4=0;
- Duan=0;
- Delay(20);
- }
- void main()
- {
- TMOD = 0x01; //设置定时器0模式1
- TH0=0xE0; TL0=0x00; //设置定时0初值 2ms@24.576M/6T
- TR0=1; ET0=1; //定时器0开始计时
- EA=1;
- SMG1=SMG2=SMG3=SMG4=DP=0;
- while(1)
- {
- Xianshi();
- }
- }
- void Tim0(void) interrupt 1 using 3 //定时器中0
- {
- TH0=0xf5; TL0=0x95; //2ms@16M
- a++;
- if(a>124) //0.25s
- {
- b++;
- Shan2=!Shan2;
- a=0;
- if(b>1) //0.5s
- {
- c++;
- b=0;
- Shan1=!Shan1;
- if(c>1)
- {
- Sec++;
- c=0;
- if(Sec>59)
- {
- Min++;
- Sec=0;
- }
- }
- }
- }
- }
复制代码 |
|