|
#include <reg51.h>//把頭文件<reg51.h>包含進(jìn)來
#define uchar unsigned char//宏定義
#define uint unsigned int//宏定義
uchar LED[]={0x3f,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,};
//定義一個無符號字符型名叫LED的共陽極數(shù)組,共有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)//延時子函數(shù),定義無符號整型的i
{
char j,i;//定義無符號字符型的x,y
for(j=10;j>0;j--)
for(i=xms;i>0;i--);//執(zhí)行i乘以10次的空函數(shù)
}
void smgxs() //主函數(shù)
{
P2=0XFF; //給P2口賦0x20(00100000)值,數(shù)碼管第六位顯示
P0=LED[huor/10]; //給P0賦LED[6]的數(shù)組的值
delayxms(5); //延時5ms的時間
P2=0XFB; //給P2口賦0x10(00010000)值,數(shù)碼管第五位顯示
P0=LED[huor%10]; //給P0賦LED[3]的數(shù)組的值
delayxms(5); //延時5ms的時間
//時
P2=0XF7; //給P2口賦0x20(00100000)值,數(shù)碼管第六位顯示
P0=0x40; //給P0賦LED[6]的數(shù)組的值
delayxms(5); //延時5ms的時間
P2=0XF3; //給P2口賦0x01(00000100)值,數(shù)碼管第三位顯示
P0=LED[min/10]; //給P0賦LED[9]的數(shù)組的值
delayxms(5); //延時5ms的時間
P2=0XEF; //給P2口賦0x01(00001000)值,數(shù)碼管第四位顯示
P0=LED[min%10]; //給P0賦LED[0]的數(shù)組的值
delayxms(5); //延時5ms的時間
//分
P2=0XEB; //給P2口賦0x20(00100000)值,數(shù)碼管第六位顯示
P0=0x40; //給P0賦LED[6]的數(shù)組的值
delayxms(5); //延時5ms的時間
P2=0XE7; //給P2口賦0x01(00000010)值,數(shù)碼管第二位顯示
P0=LED[sec/10]; //給P0賦LED[5]的數(shù)組的值
delayxms(5); //延時5ms的時間
P2=0XE3; //給P2口賦0x01(00000001)值,數(shù)碼管第一位顯示
P0=LED[sec%10]; //給P0口賦LED[]數(shù)組的第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() //主函數(shù)
{
while(1) //大循環(huán)
{
smgxs();
keys();
}
} |
|