標題: 6位時鐘可調可復位 [打印本頁]
作者: 環境開會看見和 時間: 2019-12-6 14:37
標題: 6位時鐘可調可復位
本帖最后由 環境開會看見和 于 2019-12-10 21:46 編輯
#include<reg52.h> //頭文件
#define uc unsigned char //宏定義
#define ui unsigned int //宏定義
sbit key1=P1^0;//定義調小時
sbit key2=P1^1;//定義調分鐘
sbit key3=P1^2;//定義秒清零
sbit LED=P1^6;//定義LED
sbit beep=P1^7;//設蜂鳴器
uc min,hour,sec,led,num; //無符號字符型變量
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}; //共陽級編碼
void delay(ui x)//1ms延時函數
{
ui i,j;
for(i=0;i<x;i++)
for(j=0;j<121;j++);
}
void display() //掃描顯示函數,高位到低位
{
P0=tab[hour/10]; //給小時的十位送形
P2=0x01; //1000 0000 共陽打開位選 共陽需要接高電平才亮
delay(1); //延時動態掃描
P2=0x00; //共陽的 關閉位選
/*P3=0xfe; //1111 1110 共陰打開位選 共陰需要接低電平才亮
delay(1);
P3=0xff; //共陰的 關閉位選 */
P0=(tab[hour%10]); //|0x80;*//給第二位后加“點
P2=0x02; //0100 0000
delay(1);
P2=0x00;
/*P3=0xfd; //1111 1101 共陰
delay(1);
P3=0xff;*/
/***********G橫杠效果***************/
P0=0xbf; // 橫杠共陽
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;*/ //給第四位后加“點”
P2=0x10; //0000 1000
delay(1);
P2=0x00;
/*P3=0xef; //1110 1111
delay(1);
P3=0xff;*/
/***********G橫杠效果***************/
P0=0xbf; //共陽
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()//鍵盤掃描,開關接地
{
if(key1==0) //如果小時加按鍵按下
{
delay(5); //延時去抖
if(key1==0) //確定是否按鍵
{
hour++; //小時加一
if(hour==24) //如果小時等于24
hour=0; //小時歸零
}
while(!key1) display();//判斷是否松開
}
if(key2==0) //如果分鐘加按鍵按下
{
delay(5); //延時去抖
if(key2==0) //確定是否按鍵
{
min++; //分鐘加一
if(min==60)// 如果分鐘等于60
min=0; //分鐘歸零
}
while(!key2) display();//判斷是否松開
}
if(key3==0)//判斷調整秒按鍵
{
delay(5); //延時去抖
if(key3==0) //確定是否按鍵
{sec=0;} //秒清零
while(!key3) display();//判斷是否松開
}
}
void strike()//報時函數
{
if((hour>6)&&(hour<22))//判斷大于6點并且小于22點
{
if(sec==0)//以下判斷是否整點
{
if(min==0)//如果秒和分都等于0
{
hourbeep=1; //那么蜂鳴器和小燈位開啟
hourLED=1;
}
else if(min==30)//如果分鐘等于30
{
if(num<10) //閃5下響一聲
halfbeep=1;
halfLED=1;
}
}
}
else //小于6點和大于22點的時候
{
if(sec==0)//以下判斷是否整點
{
if(min==0)//如果分鐘等于0
hourLED=1; //led位開
else if(min==30)//如果分鐘=0
halfLED=1;//進行半點報時
}
}
}
void init()//初始化函數
{
sec=0;//一通電,顯示12:30:00,蜂鳴器響一下
min=30;
hour=12;
TMOD=0x01;//設置定時器為定時器0工作方式為1
TH0=(65536-46083)/256; //賦初值
TL0=(65536-46083)%256; //賦初值
EA=1; //開總中斷
ET0=1; //開定時器0中斷
TR0=1; //啟動定時器0
}
void main()//主函數
{
init();//初始化函數
while(1) //主循環
{
display(); //顯示
keyscan();//掃描是否有鍵按下
strike();//報時函數
}
}
作者: admin 時間: 2019-12-10 00:26
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
歡迎光臨 (http://www.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
国产精品一区二区三
|
久久51|
欧美一区二区在线观看
|
免费观看黄色一级片
|
国产区精品
|
欧美久久不卡
|
国产成人精品免高潮在线观看
|
亚洲国产精品一区二区三区
|
欧美激情精品久久久久久变态
|
91精品国产一区二区
|
丝袜 亚洲 欧美 日韩 综合
|
日韩二区三区
|
男女啪啪高潮无遮挡免费动态
|
精品久久久久久久人人人人传媒
|
超碰日本|
亚洲视频免费在线
|
成人黄在线观看
|
成人免费视频在线观看
|
超碰在线观看97
|
亚洲精品高清视频在线观看
|
欧美人妇做爰xxxⅹ性高电影
|
亚洲视频中文字幕
|
精品久久久久久久久久久下田
|
亚洲天堂精品一区
|
91久久精品日日躁夜夜躁欧美
|
久久久久www
|
av片免费|
毛片网在线观看
|
成人1区2区
|
国产美女精品视频
|
日本黄色一级视频
|
亚洲欧美日韩激情
|
欧美福利精品
|
国产在视频一区二区三区吞精
|
在线观看免费av网
|
色久伊人|
亚洲激情视频在线
|
成人免费淫片aa视频免费
|
久久com|
国产精品久久久久久网站
|
午夜www
|