需要的自取,有代码和proteus仿真
单片机源程序如下:
- #include<reg52.h> //库文件
- #define uchar unsigned char//宏定义无符号字符型
- #define uint unsigned int //宏定义无符号整型
- #define DUAN P0 //P0口控制段
- #define WEI P2 //P2口控制位
- sbit k_shi=P1^0;// 更改小时按键
- sbit k_fen=P1^1;// 更改分钟按键
- sbit k_miao=P1^2;// 更改秒按键
- /********************************************************************
- 初始定义
- *********************************************************************/
- uchar Table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//七段码对应值
- uchar numb[8]; //定义字符串
- uint miao=0,fen,shi;
- /********************************************************************
- 延时函数
- *********************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=13;j>0;j--);
- { ;
- }
- }
- }
- /********************************************************************
- 求值函数
- *********************************************************************/
- void t_to_dis()
- {
- numb[0]=shi/10; //显示小时十位
- numb[1]=shi%10; //显示小时个位
- numb[2]=10; //显示横杠
- numb[3]=fen/10; //显示分十位
- numb[4]=fen%10; //显示分个位
- numb[5]=10; //显示横杠
- numb[6]=miao/10;//显示秒十位
- numb[7]=miao%10;//显示秒个位
- }
- /********************************************************************
- 显示函数
- *********************************************************************/
- void display()//显示函数
- {
- /*****************数据转换*****************************/
- uchar i,j;
- uchar sel;
- i=30; //定义延时显示时间
- sel=0x01; //扫描位初值
- for(j=0;j<8;j++)
- {
- WEI=sel; //选通最右边的数码管
- DUAN=~Table[numb[j]]; //送字型码
- delay(i); //显示延时
- sel=sel<<1;
- }
-
- }
- /********************************************************************
- 按键函数
- *********************************************************************/
- void key()//函数
- {
- if(k_shi==0){shi++;while(!k_shi);if(shi>=24)shi=0;}
- if(k_fen==0){fen++;while(!k_fen);if(fen>=60)fen=0;}
- if(k_miao==0){miao++;while(!k_miao);if(miao>=60)miao=0;}
- }
- /********************************************************************
- 定时器中断函数
- *********************************************************************/
- void timer1(void)interrupt 3
- {
- uchar i;
- TH1=0X3c;//定时初值
- TL1=0Xaf;//定时初值
- i++;
- if(i>=20)
- {i=0;
- miao++;//秒加1
- if(miao>=60)
- {miao=0;//秒清零
- fen++;//60秒后分加1
- if(fen>=60)
- {fen=0;//分清零
- shi++;//60分后时加1
- if(shi>=24)
- shi=0;//时清零
- }
- }
- }
- }
- /********************************************************************
- 中断初始化
- *********************************************************************/
- void cshh()
- {
- TMOD=0X10;//定义定时器工作方式
- TH1=0X3c;
- TL1=0Xaf;
- ET1=1;
- TR1=1;//开定时器
- EA=1;//开中断
- }
- /********************************************************************
- 主函数
- *********************************************************************/
- main()
- {
- cshh(); //中断初始化
- while(1)
- {
- key();//按键函数
- t_to_dis();//确定秒分时值
- display(); //显示秒分时值
- }
- }
-
- /********************************************************************
- 结束
- *********************************************************************/
复制代码
Keil代码与Proteus8.13仿真下载:
数字钟设计.7z
(65.8 KB, 下载次数: 12)
|