標(biāo)題: 單片機(jī)電子時(shí)鐘(LCD1602)程序設(shè)計(jì) [打印本頁]
作者: DW小飛俠 時(shí)間: 2019-7-30 09:12
標(biāo)題: 單片機(jī)電子時(shí)鐘(LCD1602)程序設(shè)計(jì)
155948wdb1ixxzcxbb1chc.png (6.95 KB, 下載次數(shù): 83)
下載附件
2019-7-30 09:07 上傳
基于AT89C52單片機(jī)的電子時(shí)鐘(LCD)的設(shè)計(jì)摘要:單片機(jī)因?qū)⑵渲饕M成部分集成在一個(gè)芯片上而得名,就是把中 央 處理器、隨機(jī)存儲器、只讀存儲器、中斷系統(tǒng)、定時(shí)器/計(jì)數(shù)器以及 I/O 接口電 路等部件集成在一個(gè)芯片上。 基于單片機(jī)設(shè)計(jì)的數(shù)字鐘精確度較高, 因?yàn)樵诔绦虻膱?zhí)行過程中, 任何指 令都不影響定時(shí)器的正常計(jì)數(shù),即便程序很長也不會影響中斷的時(shí)間。數(shù)字鐘是采用數(shù)字電路實(shí)現(xiàn)對日期、時(shí)、分、秒,數(shù)字顯示的計(jì)時(shí)裝置,由 于數(shù)字集成電路的發(fā)展和石英晶體振蕩器的廣泛應(yīng)用,使得數(shù)字鐘的精度,遠(yuǎn)遠(yuǎn) 超過老式鐘表,鐘表的數(shù)字化給人們生產(chǎn)生活帶來了極大的方便,而且大大地?cái)U(kuò)展了鐘表的報(bào)時(shí)功能。
數(shù)字鐘已成為人們?nèi)粘I钪械谋匦杵罚瑥V泛應(yīng)用于家庭、車站、碼頭、劇院、辦公室等場所,給人們的生活、學(xué)習(xí)、工作帶來極大的方便。 不僅如此,在現(xiàn)代化的進(jìn)程中,也離不開電子鐘的相關(guān)功能和原理,比如機(jī)械手 的控制、家務(wù)的自動(dòng)化、定時(shí)自動(dòng)報(bào)警、按時(shí)自動(dòng)打鈴、時(shí)間程序自動(dòng)控制、定時(shí)廣播、自動(dòng)起閉路燈、定時(shí)開關(guān)烘箱、通斷動(dòng)力設(shè)備、甚至各種定時(shí)電氣的自 動(dòng)啟用等,所有這些,都是以鐘表數(shù)字化為基礎(chǔ)的。而且是控制的核心部分。因 此,研究數(shù)字鐘及擴(kuò)大其應(yīng)用,有著非常現(xiàn)實(shí)的意義。
本設(shè)計(jì)使用 12MHZ 晶振與單片機(jī) AT89C52 相連接,以 AT89C52 芯片為核心, 采用動(dòng)態(tài)掃描方式顯示,通過使用該單片機(jī),通過 4 個(gè)按鍵進(jìn)行調(diào)時(shí)、復(fù)位等功能,在實(shí)現(xiàn)各功能時(shí)LCD進(jìn)行相應(yīng)顯示。軟件部分用 C 語言實(shí)現(xiàn),分為顯示、延遲、調(diào)時(shí)、復(fù)位等部分。通過軟硬件結(jié)合達(dá)到最終目的。
關(guān)鍵詞:電子時(shí)鐘 AT89C52單片機(jī) LCD1602顯示屏 定時(shí)中斷
第一章 設(shè)計(jì)任務(wù)與要求
1.1內(nèi)容以AT89C52單片機(jī)為核心的時(shí)鐘,在LCD顯示器上顯示當(dāng)前的時(shí)間。
1.2要求l 使用字符型LCD顯示器顯示當(dāng)前時(shí)間。
l 顯示格式為“時(shí)時(shí):分分:秒秒”。
l 用4個(gè)功能鍵操作來設(shè)置當(dāng)前時(shí)間。
功能鍵K1~K4功能如下:
l K1—進(jìn)入設(shè)置現(xiàn)在的時(shí)間。
l K2—設(shè)置小時(shí)。
l K3—設(shè)置分鐘。
l K4—確認(rèn)完成設(shè)置。
程序執(zhí)行后工作指示燈LED閃動(dòng),表示程序開始執(zhí)行,LCD顯示“00:00:00”,然后開始計(jì)時(shí)。
l 拓展功能:實(shí)現(xiàn)整時(shí)提示,在08:00---20:00進(jìn)行提示3秒,在其他的時(shí)間段不會提示。
1.3單片機(jī)系統(tǒng)運(yùn)行流程程序首先進(jìn)行初始化,在主程序的循環(huán)程序中首先調(diào)用數(shù)據(jù)處理程 序,然后調(diào)用顯示程序,在判斷是否有按鍵按下。啟動(dòng)仿真,若按下按鍵1,可發(fā)現(xiàn)LED停止閃爍,按下按鍵2和按鍵3后,可改變時(shí)間,按下按鍵4后,時(shí)鐘復(fù)位到修改時(shí)間。
附錄:源代碼#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
#define KEY_IO P3
#define LCD_IO P0
sbit LCD_RS = P2^0;
sbit LCD_RW = P2^1;
sbit LCD_EN = P2^2;
sbit SPK = P1^2;//定義蜂鳴器
sbit LED = P2^4;//定義LED
bit new_s, modify = 0;
char t0, sec = 50, min = 59, hour = 07;
char code LCD_line1[] = " a wonderful day ";
char code LCD_line2[] = " Time: 00:00:00 ";
char Timer_buf[] = "00:00:00";
void delay(uint z)//延時(shí)函數(shù)
{
uint x, y;
for(x = z; x > 0; x--)
for(y = 100; y > 0; y--);
}
void W_LCD_Com(uchar com) //寫指令
{
LCD_RS = 0;
LCD_IO = com; //RS和RW都為低電平,寫入指令
LCD_EN = 1; //用EN輸入一個(gè)高脈沖
delay(5);
LCD_EN = 0;
}
void W_LCD_Dat(uchar dat) //寫數(shù)據(jù)
{
LCD_RS = 1;
LCD_IO = dat; //RS為高電平和RW為低電平,寫入數(shù)據(jù)
LCD_EN = 1; //用EN輸入一個(gè)高脈沖
delay(5);
LCD_EN = 0;
}
void W_LCD_STR(uchar *s) //寫字符串
{
while(*s)
W_LCD_Dat(*s++);
}
void W_BUFF(void) //時(shí)、分、秒顯示
{
Timer_buf[7] = sec % 10 + 48;
Timer_buf[6] = sec / 10 + 48;
Timer_buf[4] = min % 10 + 48;
Timer_buf[3] = min / 10 + 48;
Timer_buf[1] = hour % 10 + 48;
Timer_buf[0] = hour / 10 + 48;
W_LCD_Com(0xc0 + 7);
W_LCD_STR(Timer_buf);
}
uchar read_key(void)
{
uchar x1, x2;
KEY_IO = 255;
x1 = KEY_IO;
if (x1 != 255) {
delay(100);
x2 = KEY_IO;
if (x1 != x2) return 255;
while(x2 != 255) x2 = KEY_IO;
if (x1 == 0x7f) return 0;
else if (x1 == 0xbf) return 1;
else if (x1 == 0xdf) return 2;
else if (x1 == 0xef) return 3;
else if (x1 == 0xf7) return 4;
}
return 255;
}
void Init()
{
LCD_RW = 0;
W_LCD_Com(0x38); delay(50);
W_LCD_Com(0x0c);
W_LCD_Com(0x06);
W_LCD_Com(0x01);
W_LCD_Com(0x80);
W_LCD_STR(LCD_line1);
W_LCD_Com(0xC0);
W_LCD_STR(LCD_line2);
TMOD = 0x01; //T0定時(shí)方式1
TH0 = 0x4c;
TR0 = 1; //啟動(dòng)T0
ET0 = 1;
EA = 1;
}
void main()
{
uint i, j;
uchar Key;
Init();
while(1) {
if (new_s) { //出現(xiàn)新的一秒,修改時(shí)間
new_s = 0; sec++; sec %= 60;
if(!sec) { min++; min %= 60;
if(!min) { hour++; hour %= 24;}
}
W_BUFF();
if (!min) {if(hour>=8&&hour<=20&&sec<=3)//當(dāng)在08:00—20:00之間整點(diǎn)報(bào)時(shí)
for (i = 0; i < 200;i++) {
SPK = 0; for (j = 0; j< 100; j++);
SPK = 1; for (j = 0; j< 100; j++);
} }
}
Key = read_key(); //讀按鍵
switch(Key) {
case 0: modify = 1; break;//修改鍵
case 1: if(modify) {min++; min %= 60; W_BUFF(); break;}
case 2: if(modify) {hour++; hour %= 24; W_BUFF();break;}
case 3: modify = 0; break;//確認(rèn)鍵
} }
}
void timer0(void) interrupt 1 //T0中斷,50MS執(zhí)行一次
{
TH0 = 0x4c;
t0++; t0 %= 20;
if(t0 == 0) //20,一秒
{new_s = 1; LED = ~LED;}
if(modify) LED = 0;
}
-
-
電子時(shí)鐘的設(shè)計(jì)(.zip
2019-7-30 09:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
106.28 KB, 下載次數(shù): 115, 下載積分: 黑幣 -5
-
-
單片機(jī)代碼.docx
2019-7-30 09:12 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
16.5 KB, 下載次數(shù): 48, 下載積分: 黑幣 -5
作者: cp5201314 時(shí)間: 2020-6-18 21:13
鬧鐘?
作者: 3090400442 時(shí)間: 2021-1-4 14:37
代碼好像沒給全?
歡迎光臨 (http://m.zg4o1577.cn/bbs/) |
Powered by Discuz! X3.1 |
主站蜘蛛池模板:
日日摸夜夜爽人人添av
|
欧美大片一区二区
|
久久国产精品一区二区三区
|
日韩一区二区福利
|
在线成人www免费观看视频
|
亚洲一区二区三区在线视频
|
成人在线网址
|
成人日韩
|
91.色|
亚洲黄色片免费观看
|
日本精品视频在线
|
婷婷久久五月天
|
久久久久亚洲精品
|
国产精品一区二区欧美
|
午夜精品久久久久久久久久久久
|
japanhdxxxx裸体
|
在线欧美视频
|
偷拍自拍第一页
|
91久久综合
|
国产一二区在线
|
羞羞视频网站免费观看
|
亚洲精品视
|
久久国产精品精品
|
午夜影晥
|
免费观看一级特黄欧美大片
|
亚洲91视频
|
中文字幕视频在线观看
|
日韩天堂av|
精品一区二区久久久久久久网站
|
国产精品久久久久久久久久久久久久
|
国产午夜精品一区二区三区嫩草
|
成人精品一区二区三区四区
|
国产91丝袜在线播放
|
日韩欧美一区在线
|
人人爽日日躁夜夜躁尤物
|
精品欧美色视频网站在线观看
|
亚洲国产成人精品女人久久久
|
一级黄色绿像片
|
精品96久久久久久中文字幕无
|
成人在线中文字幕
|
精品久久国产老人久久综合
|