|
需要的自取,有代碼和proteus仿真
Snipaste_2023-04-03_16-23-19.png (56.23 KB, 下載次數(shù): 25)
下載附件
2023-4-3 16:24 上傳
51hei.gif (75.89 KB, 下載次數(shù): 27)
下載附件
2023-4-4 04:52 上傳
單片機(jī)源程序如下:
- #include<reg52.h> //庫(kù)文件
- #define uchar unsigned char//宏定義無符號(hào)字符型
- #define uint unsigned int //宏定義無符號(hào)整型
- #define DUAN P0 //P0口控制段
- #define WEI P2 //P2口控制位
- sbit k_shi=P1^0;// 更改小時(shí)按鍵
- sbit k_fen=P1^1;// 更改分鐘按鍵
- sbit k_miao=P1^2;// 更改秒按鍵
- /********************************************************************
- 初始定義
- *********************************************************************/
- uchar Table[11]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40};//七段碼對(duì)應(yīng)值
- uchar numb[8]; //定義字符串
- uint miao=0,fen,shi;
- /********************************************************************
- 延時(shí)函數(shù)
- *********************************************************************/
- void delay(uchar t)
- {
- uchar i,j;
- for(i=0;i<t;i++)
- {
- for(j=13;j>0;j--);
- { ;
- }
- }
- }
- /********************************************************************
- 求值函數(shù)
- *********************************************************************/
- void t_to_dis()
- {
- numb[0]=shi/10; //顯示小時(shí)十位
- numb[1]=shi%10; //顯示小時(shí)個(gè)位
- numb[2]=10; //顯示橫杠
- numb[3]=fen/10; //顯示分十位
- numb[4]=fen%10; //顯示分個(gè)位
- numb[5]=10; //顯示橫杠
- numb[6]=miao/10;//顯示秒十位
- numb[7]=miao%10;//顯示秒個(gè)位
- }
- /********************************************************************
- 顯示函數(shù)
- *********************************************************************/
- void display()//顯示函數(shù)
- {
- /*****************數(shù)據(jù)轉(zhuǎn)換*****************************/
- uchar i,j;
- uchar sel;
- i=30; //定義延時(shí)顯示時(shí)間
- sel=0x01; //掃描位初值
- for(j=0;j<8;j++)
- {
- WEI=sel; //選通最右邊的數(shù)碼管
- DUAN=~Table[numb[j]]; //送字型碼
- delay(i); //顯示延時(shí)
- sel=sel<<1;
- }
-
- }
- /********************************************************************
- 按鍵函數(shù)
- *********************************************************************/
- void key()//函數(shù)
- {
- 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;}
- }
- /********************************************************************
- 定時(shí)器中斷函數(shù)
- *********************************************************************/
- void timer1(void)interrupt 3
- {
- uchar i;
- TH1=0X3c;//定時(shí)初值
- TL1=0Xaf;//定時(shí)初值
- i++;
- if(i>=20)
- {i=0;
- miao++;//秒加1
- if(miao>=60)
- {miao=0;//秒清零
- fen++;//60秒后分加1
- if(fen>=60)
- {fen=0;//分清零
- shi++;//60分后時(shí)加1
- if(shi>=24)
- shi=0;//時(shí)清零
- }
- }
- }
- }
- /********************************************************************
- 中斷初始化
- *********************************************************************/
- void cshh()
- {
- TMOD=0X10;//定義定時(shí)器工作方式
- TH1=0X3c;
- TL1=0Xaf;
- ET1=1;
- TR1=1;//開定時(shí)器
- EA=1;//開中斷
- }
- /********************************************************************
- 主函數(shù)
- *********************************************************************/
- main()
- {
- cshh(); //中斷初始化
- while(1)
- {
- key();//按鍵函數(shù)
- t_to_dis();//確定秒分時(shí)值
- display(); //顯示秒分時(shí)值
- }
- }
-
- /********************************************************************
- 結(jié)束
- *********************************************************************/
復(fù)制代碼
Keil代碼與Proteus8.13仿真下載:
數(shù)字鐘設(shè)計(jì).7z
(65.8 KB, 下載次數(shù): 12)
2023-4-4 04:53 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
|
|