院系: 信息工程学院
专业: 电子信息工程
课程设计题目: 基51单片机定时闹钟设计
目 录
概述3
二 原理图绘制3
21原理工作程说明4
22原理图4
23元器件功说明5
231 STC89C52单片机引脚功说明5
232 LCD1602液晶显示器7
233 重元件9
三 流程图绘制说明10
四 Proteus仿真说明11
五 课程设计体会11
六 参考文献12
七 原理图程序13
概述
设计师定时闹钟设计单片机STC89C52芯片LCDLED显示器辅必电路构成单片机定时闹钟电子钟采数字电路实现采单片机完成LCD显示时分LED闪动做秒计数定时时间发出警报声者启动继电器控制电器启停现动化高度发达时代特电子类产品部控制电路实现产品控制达动运行目需里做设计中电器元件电路支持
次设计中STC89S52进行定时结合着辅助电路实施控制定时时候控制时键时加控制分钟键分钟加达预设时间电路会发出报警声音提示已点
二原理图绘制说明
1原理工作程说明
(1)定时闹钟基功 :
(a)LCD液晶显示器显示现时间
(b)程序执行显示Time:0000 LED闪烁表示开始已计时
(c)LED闪动做秒计数表示
(2)键功 :
键K1设置现时间时调整键K2显示闹钟设置时间分调整键K3设置闹铃时间设置完成键K4闹铃ONOFF状态设置设置ON时连续三次发出哗声设置OFF发出哗声闹铃时间时发出阵声响键停止声响
(3)调整计时器时间 :
K1键然K1调整时K2调整分钟K3表示时间设置完成
(4)调整闹钟时间设置
次K3开始闹中设置LCD行显示Alarm0000K1设置时K2设置分钟次K3设置完成设置时间消失次K2时Alarm0000次显示马消失K4关闭闹钟次开闹钟
2原理图
图1 总原理图
3元器件功说明
31 STC89C51单片机引脚功说明
设计核心硬件8051芯片里选择STC89C51STC89C51种带4K字节闪烁编程擦读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)低电压高性CMOS8位微处理器俗称单片机该器件采高密度非易失存储器制造技术制造工业标准MCS51指令集输出脚相兼容功8位CPU闪烁存储器组合单芯片中STC89C51种高效微控制器嵌入式控制系统提供种灵活性高价廉方案
P0口:P0口8位漏级开路双 IO口脚吸收8TTL门电流P1口脚第次写1时定义高阻输入P0够外部程序数存储器定义数址第八位FIASH编程时P0 口作原码输入口FIASH进行校验时P0输出原码时P0外部必须拉高
P1口:P1口部提供拉电阻8位双IO口P1口缓器接收输出4TTL门电流P1口脚写入1部拉高作输入P1口外部拉低电时输出电流部拉缘FLASH编程校验时P1口作第八位址接收
P2口:P2口部拉电阻8位双IO口P2口缓器接收输出4TTL门电流P2口写1时脚部拉电阻拉高作输入作输入时P2口脚外部拉低输出电流部拉缘P2口外部程序存储器16位址外部数存储器进行存取时P2口输出址高八位出址1时利部拉优势外部八位址数存储器进行读写时P2口输出特殊功寄存器容P2口FLASH编程校验时接收高八位址信号控制信号
P3口:P3口脚8带部拉电阻双IO口接收输出4TTL门电流P3口写入1部拉高电作输入作输入外部拉低电P3口输出电流(ILL)拉缘
P3口作STC89C52特殊功口示:
P3口脚 备选功
P30 RXD(串行输入口)
P31 TXD(串行输出口)
P32 INT0(外部中断0)
P33 INT1(外部中断1)
P34 T0(记时器0外部输入)
P35 T1(记时器1外部输入)
P36 WR(外部数存储器写选通)
P37 RD(外部数存储器读选通)
P3口时闪烁编程编程校验接收控制信号
RST:复位输入振荡器复位器件时保持RST脚两机器周期高电时间
ALEPROG:访问外部存储器时址锁存允许输出电锁存址位字节FLASH编程期间引脚输入编程脉时ALE端变频率周期输出正脉信号频率振荡器频率16作外部输出脉定时目然注意:作外部数存储器时跳ALE脉想禁止ALE输出SFR8EH址置0时 ALE执行MOVXMOVC指令ALE起作外该引脚略微拉高果微处理器外部执行状态ALE禁止置位效
PSEN:外部程序存储器选通信号外部程序存储器取指期间机器周期两次PSEN效访问外部数存储器时两次效PSEN信号出现
EAVPP:EA保持低电时期间外部程序存储器(0000HFFFFH)否部程序存储器注意加密方式1时EA部锁定RESETEA端保持高电时间部程序存储器FLASH编程期间引脚施加12V编程电源(VPP)
XTAL1:反振荡放器输入部时钟工作电路输入
XTAL2:反振荡器输出
图2 STC89C52引脚图
32 1602LCD液晶显示器
图3 LCD1602引脚图
功说明
图4 LCD引脚图说明
第1脚:VSS电源
第2脚:VDD接5V正电源
第3脚:VL液晶显示器度调整端接正电源时度弱接时度高度高时会产生鬼影时通10K电位器调整度
第4脚:RS寄存器选择高电时选择数寄存器低电时选择指令寄存器
第5脚:RW读写信号线高电时进行读操作低电时进行写操作RSRW低电时写入指令者显示址RS低电RW高电时读忙信号RS高电RW低电时写入数
第6脚:E端端E端高电跳变成低电时液晶模块执行命令
第7~14脚:D0~D78位双数线
第15脚:背光源正极
第16脚:背光源负极
33 重元件
独立式键盘接口电路:单片机应系统中时需简单键系统输入信息时键接根IO接口线种方式连接称独立式键盘独立式键单独占根 IO接口线根IO接口线工作状态 会影响 IO接口线 种键接口电路配置灵活硬件结构简单键必须占根IO接口线IO接口线浪费较键数量时采种键电路电路中键输入采低电效拉电阻保证键断开时IO接口线确定高电IO接口部拉电阻时外电路配置拉电阻
图5 键盘
三流程图绘制说明
次课程设计实验程序中单片机外部中断定时器计时然通判断计时器闹铃时间闹铃响通单片机端口进行扫描判断时分秒调整选择计时器调时定时闹钟调时否闹铃
程序开始
程序流程图
初始化变量
初始化LCD
初始化计时器初始化闹铃
扫描显示器更新时间数
闹钟时间?
否4键 NO
YSE
K1调时
K2调分
K3:完成
K4开闹铃
图6 程序流程图
四proteus仿真说明
1开始程序
图7 显示器开始定时
图8 定时闹铃开调定时闹钟时间
2闹铃开计时时间定时闹铃时间喇叭开始
图9 仿真结果
五课程设计体会
次课程设计星期刚知道课程设计时候感觉题目简单应该花少时间完成课程设计感觉果汇编语言话感觉程序会点决定C语言编程开始编程时发现编程时候问题学会KEIL然生成HEX文档加载Proteus里89C52芯片芯片工作次仿真单片机种重两部分外部中断外部计时器外学会驱动1602液晶显示器次课程设计学会C语言编写程序供单片机单片机中外部中断P0P1P2口P0需添加拉电阻单片更加深入解Proteuskeil更加熟练实验中样出现问题闹钟设定K4功实现延时功实现单片机执行程序需机器周期完全解清楚汇编语言容易计算机器周期C语言话难次课程设计单片机够实现定时闹钟功实现次设计求次课程设计更加认真做前想做想学东西认识请教学
六 参考文献
[1]余发山单片机原理应技术中国矿业学出版社
[2]刘 单片机编程入门重庆学出版社
[3]郭天祥51单片机C语言教程电子工业出版社
[4]刘瑞新 单片机原理应教程北京机械工业出版社
七 程序
源程序代码
#include
#define uchar unsigned char
#define uint unsigned int
uchar code shuzi[]{0x300x310x320x330x340x350x360x370x380x39
0x20}阿拉伯数字9 0x2a表示:*
uchar kongbai0x20
sbit rsP2^5
sbit rwP2^6
sbit enP2^7
sbit k1P1^0
sbit k2P1^1
sbit k3P1^2
sbit k4P1^3sbit led_miaoP1^7
sbit buzzP2^3
sbit lampP2^4
uchar shi10x85shi20x86
uchar fen10x88fen20x89
uchar ns10xcbns20xcc
uchar nf10xcenf20xcf
uchar aaak11aaak21aaak31aaak41clockonringoff
uchar bcdechhou10
uchar bncndnchnhoun10
uchar tt0tt1tt2tt3tt4changeho10
int tt5aan
uchar pt
时钟说明
a b c d
闹钟说明
an bn cn dn
void delay(uint z)
{
uint xy
for(xzx>0x)
for(y110y>0y)
}
void wc(uchar com)
{
rs0
P0com
delay(5)
en1
delay(5)
en0
}
void wd(uchar date)
{
rs1
P0date
delay(5)
en1
delay(5)
en0
}
void init()
{
en0
rs0
rw0 写数指令时口必须低电
wc(0x38)
wc(0x0c)
wc(0x06)写字符址指针加
wc(0x01)
}
void showtime(uchar fen_1uchar fen_2uchar f1uchar f2)
{
wc(fen_1)delay(1)wd(shuzi[f1])delay(1)
wc(fen_2)delay(1)wd(shuzi[f2])delay(1)
}
void showmao(uchar kkkkk)
{
if(kkkkk0)
{ wc(0x87)delay(1)wd(0x3a)delay(1)}
else if(kkkkk1)
{ wc(0xcd)delay(1)wd(0x3a)delay(1)}
else
{ wc(0xcd)delay(1)wd(kongbai)delay(1)}
}
void key()
{
if(k10)1 start
{
delay(100)
if(k10)
{
wc(0x80+0x40)delay(1)wd(0x59)delay(1)
delay(100)
while(1)
{
if(k10)11 start
{
delay(100)
if(k10)
{
b++
if(b>hou)
{
ch++
if(ch>2)
hou4
else
hou10
if(a>2&&b>hou)
{
a(1)
b0
ch0
hou10
}
a++
b0
}
showtime(shi1shi2ab)
}
}11 end
if(k20)12 start
{
delay(100)
if(k20)
{
d++
if(d>10)
{
d0
c++
if(c>6)
c0
}
showtime(fen1fen2cd)
}
}12 end
if(k30)13 start
{
wc(0x80+0x40)delay(1)wd(kongbai)delay(1)
tt5att4btt3ctt2d
EA1ET01TR01
break
}13 end
if(k40)14 start
{
定
}14 end
}
}
}1 end
if(k20)2 start
{
delay(100)
if(k20)
{
if(aaak11)
{
aaak1++
wc(0x80+0x41)delay(1)wd(0x59)delay(1)
showtime(ns1ns2anbn)
showmao(1)
showtime(nf1nf2cndn)
}
else
{
wc(0x80+0x41)delay(1)wd(kongbai)delay(1)
showtime(ns1ns21010)
showtime(nf1nf21010)
showmao(2)
aaak11
}
}
}2 end
if(k30)3 start
{
delay(100)
if(k30)
{
showtime(ns1ns2anbn)
showmao(1)
showtime(nf1nf2cndn)
wc(0x80+0x42)delay(1)wd(0x59)delay(1)
delay(100)
while(1)
{
if(k10)31 start
{
delay(100)
if(k10)
{
bn++
if(bn>houn)
{
chn++
if(chn>2)
houn4
else
houn10
if(an>2&&bn>houn)
{
an(1)
bn0
chn0
houn10
}
an++
bn0
}
showtime(ns1ns2anbn)
}
}31 end
if(k20)32 start
{
delay(100)
if(k20)
{
dn++
if(dn>10)
{
dn0
cn++
if(cn>6)
cn0
}
showtime(nf1nf2cndn)
}
}32 end
if(k30)33 start
{
wc(0x80+0x42)delay(1)wd(kongbai)delay(1)
showtime(ns1ns21010)
showtime(nf1nf21010)
showmao(2)
break
}33 end
if(k40)14 start
{
delay(100)
if(k40)
{
if(aaak31)
{aaak3++ringoff1
wc(0x80+0x43)delay(1)wd(0x52)delay(1)}
else
{aaak31ringoff0
wc(0x80+0x43)delay(1)wd(kongbai)delay(1)}
}
}34 end
}
}
}3 end
if(k40)4 start
{
delay(100)
if(k40)
{
if(aaak41)
{
aaak4++
lamp1
clockon1
wc(0x80+0x4a)delay(1)wd(0xef)delay(1)
buzz0delay(50)buzz1delay(50)
buzz0delay(50)buzz1delay(50)
buzz0delay(50)buzz1
}
else
{
aaak41
lamp0
clockon0
wc(0x80+0x4a)delay(1)wd(kongbai)delay(1)
buzz0delay(50)buzz1
}
}
}4 end
}
void time0()
{
TH0(6553650000)256 50ms
TL0(6553650000)256
}
void main()
{
TMOD 0x01
init()
showtime(shi1shi200)
showtime(fen1fen200)
showmao(0)
showtime(ns1ns21010)
showtime(nf1nf21010)
showmao(2)
time0()
lamp0
while(1)
{
key()
}
}
void t0() interrupt 1
{
time0()
tt0++
if(k10)
{
delay(5)硬件实现时延时10
if(k10)
{
att5btt4ctt3dtt2
EA0ET00TR00
}
}
if(k20)
{
delay(5)硬件实施时延时10
if(k20)
{
if(aaak11)
{
aaak1++
wc(0x80+0x41)delay(1)wd(0x59)delay(1)
showtime(ns1ns2anbn)
showmao(1)
showtime(nf1nf2cndn)
}
else
{
wc(0x80+0x41)delay(1)wd(kongbai)delay(1)
showtime(ns1ns21010)
showtime(nf1nf21010)
showmao(2)
aaak11
}
}
}
if(k40)
{
delay(5)
if(k40)
{
if(aaak41)
{
aaak4++
lamp1
clockon1
wc(0x80+0x4a)delay(1)wd(0xef)delay(1)
buzz0delay(50)buzz1delay(50)
buzz0delay(50)buzz1delay(50)
buzz0delay(50)buzz1
}
else
{
aaak41
lamp0
clockon0
wc(0x80+0x4a)delay(1)wd(kongbai)delay(1)
buzz0delay(50)buzz1
}
}
}
if(tt0>1)20
{
tt00
led_miao~led_miao
tt1++
if(tt1>1)判断否够秒
{
tt2++
if(tt2>10)判断分钟位否满
{
tt20
tt3++
if(tt3>6)判断分钟十位否满
{
tt30
tt4++
if(tt4>hou)判断时位否满
{
ch++
if(ch>2)时时判断条件变
{
hou4
}
else
{
hou10
}
if(tt5>2&&tt4>hou)满时时候全部清零头算起
{
tt5(1)
tt40
ch0
hou10
}
tt5++
tt40
showtime(shi1shi2tt5tt4)时十位加
}
showtime(shi1shi2tt5tt4)时位加
}
showtime(fen1fen2tt3tt2)分钟十位加
}
showtime(fen1fen2tt3tt2)分钟位加
tt10
}
}
if(clockon1&&tt5an&&tt4bn&&tt3cn&&tt2dn&&pt<60)ring for 3s
{buzz0e1lamp0pt++}
if((k40&&e1)|pt>60)if ring more than 3sit will stop
{buzz1e0clockon0wc(0x80+0x4a)delay(1)wd(kongbai)delay(1)pt0}
}
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档