?? main.c
字號:
#include <reg52.h>
#include <stdio.h>
sbit test=P0^0;
//----------------------------------------------------------------
//十六進制到十進制調(diào)整程序
//designed by Kong Rui
//version 1.0
//功能描述:實現(xiàn)十六進制數(shù)到十進制數(shù)的變換
//入口參數(shù):hex_val,十六進制數(shù)
//出口參數(shù):dec_val,十進制數(shù)
//-----------------------------------------------------------------
unsigned char hex_to_dec(unsigned char hex_val)
{
unsigned char dec_val;
dec_val=((hex_val/10<<4)|(hex_val%10));
return dec_val;
}
//----------------------------------------------------------------
//時間顯示程序
//designed by Kong Rui
//version 1.0
//功能描述:將十六進制的時分秒在數(shù)碼管上顯示出來,數(shù)碼管采用的是串口擴展的,用74HC164驅(qū)動的共陰型,因而程序叫簡單
//入口參數(shù):十六進制數(shù)時間
//出口參數(shù):無
//-----------------------------------------------------------------
void display(unsigned char second,minute,hour)
{
unsigned char timer_buf[6];
unsigned char i,n;
unsigned char CLED_code[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰段碼
//"0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
/* unsigned char ALED_code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽段碼
//"0" "1" "2" "3" "4" "5" "6" "7" "8" "9" */
SCON=0; //串口同步方式,實現(xiàn)段碼發(fā)送
second=hex_to_dec(second); //進制轉(zhuǎn)換
minute=hex_to_dec(minute);
hour=hex_to_dec(hour);
timer_buf[0]=second&0x0f;
timer_buf[1]=(second>>4)&0x0f;
timer_buf[2]=minute&0x0f;
timer_buf[3]=(minute>>4)&0x0f;
timer_buf[4]=hour&0x0f;
timer_buf[5]=(hour>>4)&0x0f;
for(i=0;i<6;i++) //顯示
{
n=timer_buf[i];
SBUF=CLED_code[n];
while(!TI);
TI=0;
}
/*for(i=4;i<6;i++) //最高兩位采用的是共陽數(shù)碼管,所以兩種段碼
{
n=timer_buf[i];
SBUF=ALED_code[n];
while(!TI);
TI=0;
}*/
}
/*void delay1s(){
unsigned char i;
TMOD=0x01;
TH0=0xdc;
TL0=0;
TR0=1;
for(i=0;i<100;i++){while(!TF0);continue;}
//-----------------------------------------------------------------
//主程序
//designed by Kong Rui
//version 1.0
//功能描述:P0.0作為采樣實現(xiàn)外部定時器定時時間的測定,P0.0為高電平時開始計時,低電平是停止計時,顯示最終計時時間
//入口參數(shù):無
//出口參數(shù):無
//-----------------------------------------------------------------
}*/
void main()
{
unsigned char second,minute,hour; //上電復位會從0開始計時,若是其他原因引起的復位會繼續(xù)原來的時間計時,具有抗干擾性
unsigned char n=0; //定時器2溢出計數(shù)
RCAP2H=0x3c; //12MHz晶振定時器2 50ms定時初值
RCAP2L=0xb0;
TH2=0x3c;
TL2=0xb0;
while(!test);
TR2=1;
display(second,minute,hour); //復位顯示時間
//delay1s();
//while(!test);
while(test)
{
if(TF2)
{
TF2=0;
n=n+1;
if(n<20) continue;
else {n=0;second=second+1;} //1秒時間到,秒加1
if(second==60){second=0;minute=minute+1;} //60s到,則秒清零,分加1
if(minute==60){minute=0; hour=hour+1;} //60分到,則分清零,時加1
if(hour==13) hour=1; //12小時制,最大顯示12點59分59秒,然后顯示1點0分0秒
display(second,minute,hour); //顯示當前時間
}
else continue;
}
if(!test) //低電平計時結(jié)束
for(;;){} //無限循環(huán)
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -