单片机独立键盘
89C52单片机用数码管的前两位显示一个十进制舒,变化范围是0059,开始时显示00,每按下S2键一次,数值加1,每按下S3键,数值减1,每按下S4键,数值归零;按下S5键,定时器功能开始自动加1,再次按下S5键数值停止自动加1,保持原数值。#include<reg52.h>#define uint unsigned int#define uchar unsigned charsbit key1=P34;sbit key2=P35;sbit key3=P36;sbit key4=P37;sbit dula=P26;sbit wela=P27;uchar numt0,num,temp;uchar code table=0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F, 0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,0x00,0x73;void delay(uint z) / uint x,y; for(x=z;x>0;x-) for(y=110;y>0;y-);void display(uchar numdis) uchar shi,ge; shi=numdis/10; ge=numdis%10; dula=1;P0=tableshi;dula=0;P0=0xff;wela=1;P0=0xfe;wela=0;delay(10);dula=1;P0=tablege;dula=0;P0=0xff;wela=1;P0=0xfd;wela=0;delay(10);void init() TMOD=0x01; TH0=(65536-45872)/256; TL0=(65536-45872)%256; EA=1; ET0=1; void keyscan()TR0=temp; if(key1=0) delay(10);if(key1=0) num+; if(num=60) num=0; while(!key1); if(key2=0) delay(10); if(key2=0) if(num=0) num=60; num-; while(!key2); if(key3=0) delay(10); if(key3=0) num=0; while(!key3); if(key4=0) delay(10); if(key4=0) while(!key4); temp=temp; void main() init(); while(1) keyscan(); display(num); void T0_time() interrupt 1 TH0=(65536-45872)/256; TL0=(65536-45872)%256; numt0+; if(numt0=20) numt0=0; num+; if(num=60) num=0; 温馨提示:最好仔细阅读后才下载使用,万分感谢!