/***************2*2矩阵键盘六段数码管数字时钟****************/
/***采用六位共阴数码管***/
/**P0接位选,P1段选,P2.3,P2.2矩阵键盘行;P2.1,P2.0接列扫描**/
/**按4键进入设置时间,再按4键退出设置***/
/**********************************************************/
#include #define CHOOSE 1 //程序段选择,加上则使用138,否则使用IO口作为位选 #define M 10 //数码管位选消影时间控制 #define uint unsigned int #define uchar unsigned char uchar code tablewei[]={~0x01,~0x02,~0x04,~0x08,~0x10,~0x20}; //位选 uchar code tableduan[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0123456789 uchar hour=0,min=0,sec=0; uchar KeyNo=0; uint ti=0; /*********************/ void kscanf(void); void display(uchar h,uchar m,uchar s); void dis_t(); /********************/ void delay_ms(uint x) //10us { uchar i; for(;x>0;x--) for(i=110;i>0;i--); } void timerint(void) //100us //中断初始化 { TMOD = 0x01; TH0 = 0x0FF; TL0 = 0x9C; EA = 1; ET0 = 1; TR0 = 1; } void main() { timerint(); while(1) { P2=0xf3; TR0=1; if(P2!=0xf3) { kscanf(); if(KeyNo==4) { TR0=0; KeyNo=0; while(1) { kscanf(); switch (KeyNo) { case 1: sec++;break; case 2: min++;break; case 3: hour++;break; default:break; } if(KeyNo==4) break; KeyNo=0; dis_t(); } KeyNo=0; } } dis_t(); } } void timer(void) interrupt 1 //100us { TH0 = 0x0FF; TL0 = 0x9C; ti++; } void kscanf(void) //矩阵按键 { uchar key=0,tem; 定时器中断 if(P2 !=0xf3) { P2=0xfc; //高四位输入 列为高电平 行为低电平 delay_ms(2); tem=0x0f&P2; if(tem==8) key=0; if(tem==4) key=2; P2=0xf3; //列扫描 delay_ms(2); tem=0x0F&P2; if(tem==2) key+=1; if(tem==1) key+=2; delay_ms(5); tem=sec; while(P2!=0xf3) { if(key==4) if((tem+3) } KeyNo=key; } void display(uchar h,uchar m,uchar s) { P0=tablewei[0];P1=tableduan[s%10];delay_ms(M); P0=tablewei[1];P1=tableduan[s/10];delay_ms(M); P0=tablewei[2];P1=tableduan[m%10]|0x80;delay_ms(M); P0=tablewei[3];P1=tableduan[m/10];delay_ms(M); P0=tablewei[4];P1=tableduan[h%10]|0x80;delay_ms(M); P0=tablewei[5];P1=tableduan[h/10];delay_ms(M); } void dis_t() { if(ti>=10000) //1s { ti=0; sec++; } if(sec>=60) //1min { sec=0; min++; } if(min>=60) //1hour { min=0; hour++; } if(hour>=24) hour=0; display(hour,min,sec); } //24hour 因篇幅问题不能全部显示,请点此查看更多更全内容