|
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
單片機(jī)源程序如下:
- #include<reg52.h>
- #define codport P0 //顯示段碼輸出口
- #define sitport P2 //顯示位碼輸出口
- sbit PB1=P1^0;
- sbit PB2=P1^1; // second 調(diào)整定義
- sbit PB3=P1^2;
- sbit PB4=P1^3; //second//minite 調(diào)整定義
- sbit PB5=P1^4;
- sbit PB6=P1^5; //hour 調(diào)整定義
- sbit PB7=P1^6; //暫停
- void delay(int); // 延時(shí)子程序
- void keyscan( ); // 按鍵作用
- unsigned char code ledcode[] /*顯示0~9的代碼*/
- ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- unsigned char data hou,min,sec,num; //時(shí)分秒中斷數(shù)
- unsigned char data disbuf[]={0,0,0,0,0,0};
- //顯示數(shù)組,0元素為最高位
- void delay(int x)
- { int i,j;
- for(i=0;i<x;i++)
- for(j=0;j<120;j++);
- }
- void keyscan (void)
- {
- if(PB1==0) // 按鍵1 秒加
- {
- delay(200);
- {
- sec++;
- if(sec==60)
- {sec=0; }
- }
- }
- if(PB2==0) // 按鍵2 秒減
- {
- delay(200);
- {
- sec--;
- if(sec==-1)
- {sec=59;}
- }
- }
- if(PB3==0) // 按鍵3 分加
- {
- delay(200);
- {
- min++;
- if(min==60)
- {min=0; }
- }
- }
- if(PB4==0) // 按鍵4 分減
- {
- delay(200);
- {
- min--;
- if(min==-1)
- {min=59; }
- }
- }
-
- if(PB5==0) // 按鍵5 時(shí)加
- {
- delay(200);
- {
- hou++;
- if(hou==60)
- {hou=0;}
- }
- }
- if(PB6==0) // 按鍵7 暫停
- {
- delay(200);
- {
- hou--;
- if(hou==-1)
- {hou=23; }
- }
- }
- if(PB7==0) // 按鍵6 時(shí)減
- {
- delay(200);
- {
- EA=~EA;
- }
- }
- }
- void display() //顯示函數(shù)
- { unsigned int j; //j用于循環(huán)延時(shí)
- unsigned char i,scan; //scan為掃描碼
- scan=0x01;
- for(i=0;i<6;i++)
- { sitport=0xff; //先關(guān)閉各位
- codport=ledcode[disbuf[i]];
- //輸出顯示數(shù)的段碼
- sitport=~scan; //輸出位碼
- scan=(scan<<1); //指向下一個(gè)數(shù)位
- for(j=0;j<360;j++); //延時(shí)3ms
- } }
- void time0() interrupt 1 //定時(shí)器0中斷函數(shù)
- { TL0=55536%256; //給T0賦初值
- TH0=55536/256;
- num=num+1; //百分之一秒加1
- if(num>99)
- { num=0; sec++; //秒加1
- if(sec>59)
- { sec=0; min++; //分加1
- if(min>59)
- { min=0; hou++; //時(shí)加1
- if(hou>23) hou=0;
- } } //把時(shí)間變量分離成要顯示的各位
- disbuf[0]=hou/10; disbuf[1]=hou%10;
- disbuf[2]=min/10; disbuf[3]=min%10;
- disbuf[4]=sec/10; disbuf[5]=sec%10;
- } }
- void main() //主函數(shù)
- {
- TMOD=0x01; //設(shè)置T0以模式1定時(shí)
- TL0=55536%256; //設(shè)置T0定時(shí)10ms初值
- TH0=55536/256;
- ET0=1; //開T0中斷
- EA=1; //開總中斷
- TR0=1; //定時(shí)器0開運(yùn)行
- hou=12; min=0; //時(shí)間初始化
- sec=0; num=0;
- while(1) //循環(huán),并隨時(shí)處理中斷
- {
- display(); //調(diào)用數(shù)碼管進(jìn)行掃描顯示
- keyscan( ); // 按鍵掃描
- } }
復(fù)制代碼
所有資料51hei提供下載:
電子表可加可減可暫停.rar
(16.96 KB, 下載次數(shù): 24)
2019-12-10 17:05 上傳
點(diǎn)擊文件名下載附件
|
評(píng)分
-
查看全部評(píng)分
|