標(biāo)題: 6位時(shí)鐘可調(diào)可復(fù)位 [打印本頁(yè)]
作者: 環(huán)境開(kāi)會(huì)看見(jiàn)和 時(shí)間: 2019-12-6 14:37
標(biāo)題: 6位時(shí)鐘可調(diào)可復(fù)位
本帖最后由 環(huán)境開(kāi)會(huì)看見(jiàn)和 于 2019-12-10 21:46 編輯
#include<reg52.h> //頭文件
#define uc unsigned char //宏定義
#define ui unsigned int //宏定義
sbit key1=P1^0;//定義調(diào)小時(shí)
sbit key2=P1^1;//定義調(diào)分鐘
sbit key3=P1^2;//定義秒清零
sbit LED=P1^6;//定義LED
sbit beep=P1^7;//設(shè)蜂鳴器
uc min,hour,sec,led,num; //無(wú)符號(hào)字符型變量
bit bdata hourLED,halfLED,hourbeep,halfbeep; //位變量
//uc code tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共陰極編碼
uc code tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; //共陽(yáng)級(jí)編碼
void delay(ui x)//1ms延時(shí)函數(shù)
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<121;j++);
}
void display() //掃描顯示函數(shù),高位到低位
{
P0=tab[hour/10]; //給小時(shí)的十位送形
P2=0x01; //1000 0000 共陽(yáng)打開(kāi)位選 共陽(yáng)需要接高電平才亮
delay(1); //延時(shí)動(dòng)態(tài)掃描
P2=0x00; //共陽(yáng)的 關(guān)閉位選
/*P3=0xfe; //1111 1110 共陰打開(kāi)位選 共陰需要接低電平才亮
delay(1);
P3=0xff; //共陰的 關(guān)閉位選 */
P0=(tab[hour%10]); //|0x80;*//給第二位后加“點(diǎn)
P2=0x02; //0100 0000
delay(1);
P2=0x00;
/*P3=0xfd; //1111 1101 共陰
delay(1);
P3=0xff;*/
/***********G橫杠效果***************/
P0=0xbf; // 橫杠共陽(yáng)
P2=0x04; //0010 0000
delay(1);
P2=0x00;
/*P2=0x40; //共陰
P3=0xfb; //1111 1011
delay(1);
P3=0xff;*/
/***********G橫杠效果***************/
P0=tab[min/10];
P2=0x08; //0001 0000
delay(1);
P2=0x00;
/*P3=0xf7; //1111 0111
delay(1);
P3=0xff; */
P0=(tab[min%10]); /*|0x80;*/ //給第四位后加“點(diǎn)”
P2=0x10; //0000 1000
delay(1);
P2=0x00;
/*P3=0xef; //1110 1111
delay(1);
P3=0xff;*/
/***********G橫杠效果***************/
P0=0xbf; //共陽(yáng)
P2=0x20; //0000 0100
delay(1);
P2=0x00;
/*P2=0x40; //共陰
P3=0xdf; //1101 1111 共陰
delay(1);
P3=0xff;*/
/***********G橫杠效果***************/
P0=tab[sec/10];
P2=0x40; //0000 0010
delay(1);
P2=0x00;
/*P3=0xbf; //1011 1111
P3=0xff;
delay(1);*/
P0=tab[sec%10];
P2=0x80; //0000 0001
delay(1);
P2=0x00;
/*P3=0x7f; //0111 1111
delay(1);
P3=0xff;*/
}
void keyscan()//鍵盤掃描,開(kāi)關(guān)接地
{
if(key1==0) //如果小時(shí)加按鍵按下
{
delay(5); //延時(shí)去抖
if(key1==0) //確定是否按鍵
{
hour++; //小時(shí)加一
if(hour==24) //如果小時(shí)等于24
hour=0; //小時(shí)歸零
}
while(!key1) display();//判斷是否松開(kāi)
}
if(key2==0) //如果分鐘加按鍵按下
{
delay(5); //延時(shí)去抖
if(key2==0) //確定是否按鍵
{
min++; //分鐘加一
if(min==60)// 如果分鐘等于60
min=0; //分鐘歸零
}
while(!key2) display();//判斷是否松開(kāi)
}
if(key3==0)//判斷調(diào)整秒按鍵
{
delay(5); //延時(shí)去抖
if(key3==0) //確定是否按鍵
{sec=0;} //秒清零
while(!key3) display();//判斷是否松開(kāi)
}
}
void strike()//報(bào)時(shí)函數(shù)
{
if((hour>6)&&(hour<22))//判斷大于6點(diǎn)并且小于22點(diǎn)
{
if(sec==0)//以下判斷是否整點(diǎn)
{
if(min==0)//如果秒和分都等于0
{
hourbeep=1; //那么蜂鳴器和小燈位開(kāi)啟
hourLED=1;
}
else if(min==30)//如果分鐘等于30
{
if(num<10) //閃5下響一聲
halfbeep=1;
halfLED=1;
}
}
}
else //小于6點(diǎn)和大于22點(diǎn)的時(shí)候
{
if(sec==0)//以下判斷是否整點(diǎn)
{
if(min==0)//如果分鐘等于0
hourLED=1; //led位開(kāi)
else if(min==30)//如果分鐘=0
halfLED=1;//進(jìn)行半點(diǎn)報(bào)時(shí)
}
}
}
void init()//初始化函數(shù)
{
sec=0;//一通電,顯示12:30:00,蜂鳴器響一下
min=30;
hour=12;
TMOD=0x01;//設(shè)置定時(shí)器為定時(shí)器0工作方式為1
TH0=(65536-46083)/256; //賦初值
TL0=(65536-46083)%256; //賦初值
EA=1; //開(kāi)總中斷
ET0=1; //開(kāi)定時(shí)器0中斷
TR0=1; //啟動(dòng)定時(shí)器0
}
void main()//主函數(shù)
{
init();//初始化函數(shù)
while(1) //主循環(huán)
{
display(); //顯示
keyscan();//掃描是否有鍵按下
strike();//報(bào)時(shí)函數(shù)
}
}
作者: admin 時(shí)間: 2019-12-10 00:26
本帖需要重新編輯補(bǔ)全電路原理圖,源碼,詳細(xì)說(shuō)明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.torrancerestoration.com/bbs/) |
Powered by Discuz! X3.1 |