此程序為本人以前剛學時候編寫的,還存在許多未經優化的地方,也沒有多少注釋,請多擔待。
功能如下:
1、按下k1,流水燈閃爍。
2、按下k2,開始從20開始計時。
3、按下k3,停止計時,開始累加。
[W8WPN[Q62QXM5XMT3[34.png (102.03 KB, 下載次數: 36)
下載附件
2019-7-19 17:27 上傳
以下為部分程序:
- #include "reg52.h"
- #include "intrins.h"
- #define led P1 //定義LED
- sbit k1=P0^0;
- sbit k2=P0^1;
- sbit k3=P0^2 ; //定義按鍵
- char code smguan[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數字定義
- #define num1 P2
- #define num2 P3//定義數碼管管腳
- int a=0,b=2;
- int c=0;d=2;
- void delay(int i)
- {
- while(i--);
- }
- void delay800ms() //誤差 0us
- {
- unsigned char a,b,c;
- for(c=95;c>0;c--)
- for(b=138;b>0;b--)
- for(a=29;a>0;a--);
- _nop_(); //if Keil,require use intrins.h
- _nop_(); //if Keil,require use intrins.h
- }
- void twinkle()
- {
-
- if(k1==1) //檢測按鍵K1是否按下
- {
- delay(1000); //消除抖動 一般大約10ms
- if(k1==1) //再次判斷按鍵是否按下
- {
- while(1)
- {led=0xaa;
- delay(50000);
- led=~led; //led狀態取反
- delay(50000);
- if((k2==1)||(k3==1))break;
- }
- }
- }
- }
- void Timer1Init()
- {
- TMOD|=0X10;//選擇為定時器1模式,工作方式1,僅用TR1打開啟動。
- TH1=0XFC; //給定時器賦初值,定時1ms
- TL1=0X18;
- ET1=1;//打開定時器1中斷允許
- EA=1;//打開總中斷
- TR1=1;//打開定時器
- }
- void time()
- {
- if(k2==1) //檢測按鍵K2是否按下
- {
- delay(1000); //消除抖動 一般大約10ms
- if(k2==1) //再次判斷按鍵是否按下
- {
- Timer1Init(); //定時器1初始化
-
- }
- }
- }
- void Timer1() interrupt 3
- {
- static int i;
- TH1=0XFC; //給定時器賦初值,定時1ms
- TL1=0X18;
- i++;
- if(i==1000)
- {
- i=0;
- num2=smguan[a++];
- num1=smguan[b];
- if(a==10)
- {
- a=0;
- if(b==5)
- {
- b=2;
- }
- else b++;
- }
- }
- if((k1==1)||(k3==1))TR1=0;
- }
- void Timer0Init()
- {
- TMOD|=0X01;//選擇為定時器0模式,工作方式1,僅用TR0打開啟動。
- TH0=0XFC; //給定時器賦初值,定時1ms
- TL0=0X18;
- ET0=1;//打開定時器0中斷允許
- EA=1;//打開總中斷
- TR0=1;//打開定時器
- }
- void leijia()
- {
- while(1){
- if(k3==1) //檢測按鍵K1是否按下
- {
- delay(80); //消除抖動 一般大約10ms
- if(k3==1) //再次判斷按鍵是否按下
- { num2=smguan[c];
- num1=smguan[d];
- c=c+1;
- if(c==10)
- {
- c=0;
- if(d==5)
- {
- d=2;
- }
- else d=d+1;
- }
- }
- }delay(20000);
- if((k1==1)||(k2==1)){c=0;d=2;break;}
- }
- }
- void main()
- {
- while(1)
- {
- twinkle();
- time();
- leijia();
- }
- }
復制代碼 |