单片机实训内容1602的运用Word文件下载.docx
《单片机实训内容1602的运用Word文件下载.docx》由会员分享,可在线阅读,更多相关《单片机实训内容1602的运用Word文件下载.docx(12页珍藏版)》请在冰豆网上搜索。
三、电路的设计与分析
上图所示为产生五伏电压的电路图。
通过整流滤波所产生的5V电压供给单片机和显示器。
上图所示为单片机控制原理图电路,对单片机89c51写入程序。
进而进行显示时间和通过按钮调节输入的高低电平来调节时间的加减。
程序验证图
四、程序流程图
附录1602的程序:
主函数Main.c
#include<
reg51.h>
#include"
clock.h"
main()
{
lcd_init();
T0_init();
while
(1)
{
CharToAscii();
display();
KeyScan();
}
}
voidT0_ISR()interrupt1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
ucCount_ms++;
if(ucCount_ms==10)
flag_flash=0;
if(ucCount_ms>
=20)
ucCount_ms=0;
flag_flash=1;
SecondAdd();
副函数Clock.h
#defineucharunsignedchar
#defineuintunsignedint
sbitRS=P2^0;
sbitRW=P2^1;
sbitE=P2^2;
ucharCanl[16]={"
2011-03-24"
};
ucharTime[16]={"
12:
30:
00"
ucharucHour;
ucharucMinute;
ucharucSecond;
ucharucCount_ms;
ucharucWX=0;
bitflag_flash;
voiddelay(uintx)
while(x--);
voiddelay_ms(ucharx)
uchari;
while(x--)
for(i=0;
i<
125;
i++);
voidwrcommand(uchartemp)
delay(300);
RS=0;
RW=0;
E=1;
P0=temp;
E=0;
voidwrdata(uchartemp)
RS=1;
voidlcd_init()
wrcommand(0x01);
wrcommand(0x38);
wrcommand(0x06);
wrcommand(0x0c);
voidCharToAscii()
if(flag_flash)
Time[4]=ucHour/10+0x30;
Time[5]=ucHour%10+0x30;
Time[7]=ucMinute/10+0x30;
Time[8]=ucMinute%10+0x30;
Time[10]=ucSecond/10+0x30;
Time[11]=ucSecond%10+0x30;
else
switch(ucWX)
case1:
Time[4]='
'
;
Time[5]='
break;
case2:
Time[7]='
Time[8]='
case3:
Time[10]='
Time[11]='
voidlcd_string(uchar*p,ucharflag)
ucharaddr;
if(flag==1)
addr=0x80;
while(*p!
='
\0'
)
wrcommand(addr);
wrdata(*p);
addr++;
p++;
if(flag==2)
addr=0xc0;
}
voiddisplay()
lcd_string(Canl,1);
lcd_string(Time,2);
voidT0_init()
TMOD=0x01;
ET0=1;
EA=1;
TR0=1;
voidHourAdd()
ucHour++;
if(ucHour>
=24)
ucHour=0;
//DayAdd();
//WeekAdd();
voidHourDec()
if(ucHour==0)
ucHour=23;
ucHour--;
voidMinuteAdd()
ucMinute++;
if(ucMinute>
=60)
ucMinute=0;
HourAdd();
voidMinuteDec()
if(ucMinute==0)
ucMinute=59;
ucMinute--;
voidSecondAdd()
ucSecond++;
if(ucSecond>
ucSecond=0;
MinuteAdd();
voidSecondDec()
if(ucSecond==0)
ucSecond=59;
ucSecond--;
voidB_add()
switch(ucWX)
HourAdd();
break;
case2:
MinuteAdd();
case3:
SecondAdd();
voidB_dec()
HourDec();
MinuteDec();
SecondDec();
voidKeyScan()
ucharKeyValue;
P1=0xff;
KeyValue=P1;
if(KeyValue!
=0xff)
delay_ms(20);
switch(KeyValue)
{
case0xfe:
ucWX++;
if(ucWX>
=4)
ucWX=0;
case0xfd:
B_add();
case0xfb:
B_dec();
case0xf7:
TR0=!
TR0;
}
五、课程设计收获:
2周的课程设计快结束了,通过这次对数字电子钟的设计作,让我了解了电路设计的基本步骤,也让我了解了关于电子时钟的原理和设计理念。
电子课程设计是电类专业学生重要基础实践课是工科专业的必修课。
经过查资料、选方案、设计电路、撰写设计报告、使我得到一次较全面的实践训练。
理论联系实际,提高和培养创新能力,为后续课程的学习,打下基础。
并且在此次的单片机设计过程中,更进一步地熟悉了芯片的结构及掌握了芯片的工作原理和具体的使用方法。