#include <reg51.h>//把头文件<reg51.h>包含进来
#define uchar unsigned char//宏定义
#define uint unsigned int//宏定义
uchar LED[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
//定义一个无符号字符型名叫LED的共阳极数组,共有10个元素,分别显示0-9
char huor=00;//时
char min=00;//分
char sec=00;//秒
sbit k1=P3^0;
sbit k2=P3^1;
sbit k3=P3^2;
void delayxms(char xms)//延时子函数,定义无符号整型的i
{
char j,i;//定义无符号字符型的x,y
for(j=10;j>0;j--)
for(i=xms;i>0;i--);//执行i乘以10次的空函数
}
void smgxs() //主函数
{
P2=0XFF; //给P2口赋0x20(00100000)值,数码管第六位显示
P0=LED[huor/10]; //给P0赋LED[6]的数组的值
delayxms(5); //延时5ms的时间
P2=0XFB; //给P2口赋0x10(00010000)值,数码管第五位显示
P0=LED[huor%10]; //给P0赋LED[3]的数组的值
delayxms(5); //延时5ms的时间
//时
P2=0XF7; //给P2口赋0x20(00100000)值,数码管第六位显示
P0=0x40; //给P0赋LED[6]的数组的值
delayxms(5); //延时5ms的时间
P2=0XF3; //给P2口赋0x01(00000100)值,数码管第三位显示
P0=LED[min/10]; //给P0赋LED[9]的数组的值
delayxms(5); //延时5ms的时间
P2=0XEF; //给P2口赋0x01(00001000)值,数码管第四位显示
P0=LED[min%10]; //给P0赋LED[0]的数组的值
delayxms(5); //延时5ms的时间
//分
P2=0XEB; //给P2口赋0x20(00100000)值,数码管第六位显示
P0=0x40; //给P0赋LED[6]的数组的值
delayxms(5); //延时5ms的时间
P2=0XE7; //给P2口赋0x01(00000010)值,数码管第二位显示
P0=LED[sec/10]; //给P0赋LED[5]的数组的值
delayxms(5); //延时5ms的时间
P2=0XE3; //给P2口赋0x01(00000001)值,数码管第一位显示
P0=LED[sec%10]; //给P0口赋LED[]数组的第8位的值
delayxms(5);//延时5ms的时间
//秒
}
void keys()
{
if(k1==0)//判断第一次K1按键是否按下
{
delayxms(10);//延时消抖,消抖时间为10ms
if(k1==0)//判断第二次K1按键是否按下
{sec++;//count自动增1
if(sec>59) sec=59;//如果count>8,重新将其置为0
while (!k1);//等待K1按键释放
}
}
if(k2==0)//判断第一次K1按键是否按下
{
delayxms(10);//延时消抖,消抖时间为10ms
if(k2==0)//判断第二次K1按键是否按下
{min++;//count自动增1
if(min>59) min=59;//如果count>8,重新将其置为0
while (!k2);//等待K1按键释放
}
}
if(k3==0)//判断第一次K1按键是否按下
{
delayxms(10);//延时消抖,消抖时间为10ms
if(k3==0)//判断第二次K1按键是否按下
{huor++;//count自动增1
if(huor>24) huor=24;//如果count>8,重新将其置为0
while (!k3);//等待K1按键释放
}
}
}
void main() //主函数
{
while(1) //大循环
{
smgxs();
keys();
}
} |