![]() |
#include "reg52.h" #include "intrins.h" sbit key1 = P3^0; sbit key2 = P3^1; sbit key3 = P3^2;//對按鍵進行定義 sbit buzz = P1^2;//蜂鳴器外設控制端口定義 sbit DU = P2^0; sbit WE = P2^1; unsigned char array[]={0x38,0x3f,0x3e,0x79,0x3e};//定義L O V E U數碼管顯示 bit buzz_jiou=0,led_jiou=0; unsigned int timenum = 0; unsigned int num = 0,num1 = 0,num2 = 0,num3=0,num4=0; unsigned int time5 =0; void Delay1ms(unsigned int k) //@11.0592MHz { unsigned char i, j; for(;k>0;k--) { _nop_(); _nop_(); _nop_(); i = 11; j = 190; do { while (--j); } while (--i); } } void display(unsigned int second,unsigned char lednum) { DU=1; P0=array[second]; DU=0; WE=1; P0=lednum; WE=0; // Delay(5); // // DU=1; // P0=0X00; // DU=0; } void buzz_1(unsigned int C) { unsigned int i ; i=0; for(i>=0;i<C;i++) { buzz=0; Delay1ms(100); buzz=1; Delay1ms(100); } } void LED(void) { unsigned char A,H; unsigned char i; if(key2==0&&led_jiou==1) //按鍵key2按下奇數次 { A=0x7f; for(i=9;i>1;i--) { P1=A; Delay1ms(100); A=(A>>1)|0x80; } } if(key2==0&&led_jiou==0) //按鍵key2按下偶數次 { H=0xfe; for(i=1;i<9;i++) { P1=H; Delay1ms(100); H=(H<<1)|1; } } } void key(void) { if(key1==0) //表示按鍵1按下 { Delay1ms(10); if(key1==0) //表示按鍵1按下 num++; //k1按下的次數 //num=num+1 num1=num%2; //num=0或者=1 num2=num1+2; P1=0xff; buzz_1(num2); while(!key1); } if(num1==1) { if(key2==0) { Delay1ms(10); if(key2==0) led_jiou=~led_jiou; while(!key2); } if(key3==0) { Delay1ms(10); if(key3==0) num3=1; while(!key3); } } } void main(void) { unsigned int N,M; TMOD = 0x01; TH0 = (65536-3000)/256; TH1 = (65536-3000)%256; EA = 1; ET0 = 1; TR0 = 1; while(1) { key(); LED(); } } void timer0(void) interrupt 1 { time5++; TH0 = (65536-3000)/256; TH1 = (65536-3000)%256; if(num3==1&&num1==1) switch(time5%6) { case 0:display(0,0xfe);//20ms // lednumber = 0xfe; break; case 1:display(1,0xfd); // lednumber = 0xfd; break; case 2:display(2,0xfb); // lednumber = 0xfb; break; case 3:display(3,0xf7); // lednumber = 0xf7; break; case 4:display(4,0xdf); // lednumber = 0xf7; break; default: break; } } |
要加防抖判斷 |
你這是什么? |
圖片都看不清! |
你把代碼直接貼上,我們這兒樣看不清 |