单片机实训内容1602的运用.docx

上传人:b****6 文档编号:4777233 上传时间:2022-12-08 格式:DOCX 页数:12 大小:241.70KB
下载 相关 举报
单片机实训内容1602的运用.docx_第1页
第1页 / 共12页
单片机实训内容1602的运用.docx_第2页
第2页 / 共12页
单片机实训内容1602的运用.docx_第3页
第3页 / 共12页
单片机实训内容1602的运用.docx_第4页
第4页 / 共12页
单片机实训内容1602的运用.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

单片机实训内容1602的运用.docx

《单片机实训内容1602的运用.docx》由会员分享,可在线阅读,更多相关《单片机实训内容1602的运用.docx(12页珍藏版)》请在冰豆网上搜索。

单片机实训内容1602的运用.docx

单片机实训内容1602的运用

 

课程设计报告

 

题目:

单片机课程设计

班级:

09级电子信息工程1班

姓名:

吴格

指导老师:

刘晓明

 

一、课程设计任务:

设计并制作运用单片机的电子时钟,并对其进行时

间的调试。

加强电子设计软件的运用。

学会运用1602液晶屏。

二、课程设计目的:

1、掌握单片机电子时钟的设计、组装和调试方法。

2、熟悉集成电路89C51的引脚安排。

3、了解电路结构及其接线方法。

三、电路的设计与分析

上图所示为产生五伏电压的电路图。

通过整流滤波所产生的5V电压供给单片机和显示器。

上图所示为单片机控制原理图电路,对单片机89c51写入程序。

进而进行显示时间和通过按钮调节输入的高低电平来调节时间的加减。

程序验证图

四、程序流程图

附录1602的程序:

主函数Main.c

#include

#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)

{

delay(300);

RS=1;

RW=0;

E=1;

P0=temp;

E=0;

}

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]='';

break;

case3:

Time[10]='';

Time[11]='';

break;

}

}

}

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;

while(*p!

='\0')

{

wrcommand(addr);

wrdata(*p);

addr++;

p++;

}

}

}

voiddisplay()

{

lcd_string(Canl,1);

lcd_string(Time,2);

}

voidT0_init()

{

TMOD=0x01;

TH0=(65536-50000)/256;

TL0=(65536-50000)%256;

ET0=1;

EA=1;

TR0=1;

}

voidHourAdd()

{

ucHour++;

if(ucHour>=24)

{

ucHour=0;

//DayAdd();

//WeekAdd();

}

}

voidHourDec()

{

if(ucHour==0)

ucHour=23;

else

ucHour--;

}

voidMinuteAdd()

{

ucMinute++;

if(ucMinute>=60)

{

ucMinute=0;

HourAdd();

}

}

voidMinuteDec()

{

if(ucMinute==0)

ucMinute=59;

else

ucMinute--;

}

voidSecondAdd()

{

ucSecond++;

if(ucSecond>=60)

{

ucSecond=0;

MinuteAdd();

}

}

voidSecondDec()

{

if(ucSecond==0)

ucSecond=59;

else

ucSecond--;

}

voidB_add()

{

switch(ucWX)

{

case1:

HourAdd();

break;

case2:

MinuteAdd();

break;

case3:

SecondAdd();

break;

}

}

voidB_dec()

{

switch(ucWX)

{

case1:

HourDec();

break;

case2:

MinuteDec();

break;

case3:

SecondDec();

break;

}

}

voidKeyScan()

{

ucharKeyValue;

P1=0xff;

KeyValue=P1;

if(KeyValue!

=0xff)

{

delay_ms(20);

P1=0xff;

KeyValue=P1;

if(KeyValue!

=0xff)

{

switch(KeyValue)

{

case0xfe:

ucWX++;

if(ucWX>=4)

ucWX=0;

break;

case0xfd:

B_add();

break;

case0xfb:

B_dec();

break;

case0xf7:

TR0=!

TR0;

break;

}

}

}

}

 

五、课程设计收获:

2周的课程设计快结束了,通过这次对数字电子钟的设计作,让我了解了电路设计的基本步骤,也让我了解了关于电子时钟的原理和设计理念。

电子课程设计是电类专业学生重要基础实践课是工科专业的必修课。

经过查资料、选方案、设计电路、撰写设计报告、使我得到一次较全面的实践训练。

理论联系实际,提高和培养创新能力,为后续课程的学习,打下基础。

并且在此次的单片机设计过程中,更进一步地熟悉了芯片的结构及掌握了芯片的工作原理和具体的使用方法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 高考

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1