獨立式鍵盤調時的數碼時鐘實驗仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (23.45 KB, 下載次數: 16)
下載附件
2018-11-26 01:22 上傳
0.png (50.11 KB, 下載次數: 22)
下載附件
2018-11-26 01:22 上傳
單片機源程序如下:
- //實例75:獨立式鍵盤調時的數碼時鐘實驗
- #include<reg51.h> // 包含51單片機寄存器定義的頭文件
- unsigned char code Tab[ ]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //數字0~9的段碼
- unsigned char int_time ; //中斷次數計數變量
- unsigned char second; //秒計數變量
- unsigned char minute; //分鐘計數變量
- unsigned char hour; //小時計數變量
- sbit S1=P1^4; //將S1位定義為P1.4
- sbit S2=P1^5; //將S2位定義為P1.5
- sbit S3=P1^6; //將S3位定義為P1.6
- sbit S4=P1^7; //將S4位定義為P1.7
- /******************************************************************
- 函數功能:數碼管掃描延時
- ********************************************************************/
- void delay(void)
- {
- unsigned char j;
- for(j=0;j<200;j++)
- ;
- }
- /******************************************************************
- 函數功能:鍵盤掃描延時
- ********************************************************************/
- void delay60ms(void)
- {
- unsigned char i,j;
- for(i=0;i<200;i++)
- for(j=0;j<100;j++)
- ;
- }
- /******************************************************************
- 函數功能:顯示秒
- 入口參數:s
- ********************************************************************/
- void DisplaySecond(unsigned char s)
- {
- P2=0xbf; //P2.6引腳輸出低電平, DS6點亮
- P0=Tab[s/10]; //顯示十位
- delay();
- P2=0x7f; //P2.7引腳輸出低電平, DS7點亮
- P0=Tab[s%10]; //顯示個位
- delay();
- P2=0xff; //關閉所有數碼管
-
- }
-
- /******************************************************************
- 函數功能:顯示分鐘
- 入口參數:m
- ********************************************************************/
- void DisplayMinute(unsigned char m)
- {
- P2=0xf7; // P2.3引腳輸出低電平, DS3點亮
- P0=Tab[m/10];//顯示個位
- delay();
- P2=0xef; // P2.4引腳輸出低電平, DS4點亮
- P0=Tab[m%10];
- delay();
- P2=0xdf; //P2.5引腳輸出低電平, DS5點亮
- P0=0xbf; //分隔符“-”的段碼
- delay();
- P2=0xff; //關閉所有數碼管
- }
- /******************************************************************
- 函數功能:顯示小時的子程序
- 入口參數:h
- ********************************************************************/
- void DisplayHour(unsigned char h)
- {
-
- P2=0xfe; //P2.0引腳輸出低電平, DS0點亮
- P0=Tab[h/10]; //顯示十位
- delay();
-
- P2=0xfd; //P2.1引腳輸出低電平, DS1點亮
- P0=Tab[h%10]; //顯示個位
- delay();
- P2=0xfb; //P2.2引腳輸出低電平, DS2點亮
- P0=0xbf; //分隔符“-”的段碼
- delay();
- P2=0xff; //關閉所有數碼管
-
- }
- /******************************************************************
- 函數功能:鍵盤掃描
- ********************************************************************/
- void key_scan(void)
- {
- P1=0xf0; //將P1口高4位置高電平“1”
- if((P1&0xf0)!=0xf0) //有鍵按下
- {
- delay60ms(); //延時60ms再檢測
- if((P1&0xf0)!=0xf0) //確實有鍵按下
- {
- if(S1==0) //如果是S1鍵按下
- second++; //秒加1
- if(S2==0) //如果是S2鍵按下
- minute++; //分鐘加1
- if(S3==0) //如果是S3鍵按下
- hour++; //小時加1
- if(S4==0) //如果是S4鍵按下
- {
- second=0; //秒清0
- minute=0; //分鐘清0
- hour=0; //小時清0
- }
- }
- }
- }
- /******************************************************************
- 函數功能:主函數
- ********************************************************************/
- void main(void)
- {
-
- TMOD=0x01; //使用定時器T0
- EA=1; //開中斷總允許
- ET0=1; //允許T0中斷
- TH0=(65536-46083)/256; //定時器高八位賦初值
- TL0=(65536-46083)%256; //定時器低八位賦初值
- TR0=1; //啟動定時器T0
- int_time=0; //中斷計數變量初始化
- second=0; //秒計數變量初始化
- minute=0; //分鐘計數變量初始化
- hour=0; //小時計數變量初始化
-
- while(1)
- {
- DisplaySecond(second); //調用秒顯示子程序
- DisplayMinute(minute); //調用分鐘顯示子程序
- DisplayHour(hour); //調用小時顯示子程序
-
- }
- }
- /******************************************************************
- 函數功能:定時器T0的中斷服務子程序
- ********************************************************************/
- void interserve(void ) interrupt 1 using 1 //using Time0
- {
- TR0=0; //關閉定時器T0
- int_time++; //中斷次數加1
- if(int_time==20) //如果中斷次數滿20
- {
- int_time=0; //中斷計數變量清0
- second++; //秒計數變量加1
- }
- if(second==60) //如果秒計滿60
- {
- second=0; //如果秒計滿60,將秒計數變量清0
- minute++; //分鐘計數變量加1
- }
- if(minute==60) //如果分鐘計滿60
- {
- minute=0; //如果分鐘計滿60,將分鐘計數變量清0
- hour++; //小時計數變量加1
- }
- if(hour==24) //如果小時計滿24
- {
- hour=0; //如果小時計滿24,將小時計數變量清0
- }
- key_scan(); //執行鍵盤掃描
- TH0=(65536-46083)/256; //定時器T0高四位賦值
- TL0=(65536-46083)%256; //定時器T0低四位賦值
- TR0=1; //啟動定時器T0
-
- }
復制代碼
所有資料51hei提供下載:
獨立式鍵盤調時的數碼時鐘實驗.zip
(34.09 KB, 下載次數: 10)
2018-11-25 22:33 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|