基于89c51单片机课程设计Word文档下载推荐.docx
- 文档编号:4603686
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:27
- 大小:815.50KB
基于89c51单片机课程设计Word文档下载推荐.docx
《基于89c51单片机课程设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《基于89c51单片机课程设计Word文档下载推荐.docx(27页珍藏版)》请在冰点文库上搜索。
参考资料
1、前言
单片机是什么?
单片机又称单片微控制器,它不是完成某一个逻辑功能的芯片,而是把一个计算机系统集成到一个芯片上。
概括的讲:
一块芯片就成了一台计算机。
它的体积小、质量轻、价格便宜、为学习、应用和开发提供了便利条件。
单片机作为应用最广泛的控制系统之一,具有体积小,易于控制,价格便宜,安全可靠等等优良的性能而被广泛的关注。
无论是小到儿童玩具,到工业控制系统,大到航天航空系统的设计与操作之中,随处可见单片机的踪影。
大学电子专业,电气专业,通信等专业开设单片机课程,对人才的培养无疑是有着重大的意义的。
单片机的学习,主要是注重于对单片机内部存储结构,引脚的结构与功能,以及各引脚之间的区别,用法上面的不同。
同样,单片机是一门技术,需要大量的动手实践才能真正的掌握其基本原理,才能真正的控制单片机并设计其程序,使其运行在指定的程序之下。
课程设计是在校学生素质教育的重要环节,是理论与实践相结合的桥梁和纽带。
单片机课程设计,要求学生更多的完成软硬结合的动手实践方案,解决目前学生课程设计过程中普遍存在的缺乏动手能力的现象.《单片机课程设计》是继《电子技术》、和《单片机原理及在电气测控学科中的应用》课程之后开出的实践环节课程,其目的和任务是训练学生综合运用已学课程“电子技术基础”、“单片机原理及在电气测控学科中的应用”的基本知识,独立进行单片机应用技术和开发工作,掌握单片机程序设计、调试和应用电路设计、分析及调试检测。
要求学生在实验室做出产品或仿真调试。
所以,个高校开设单片机课程设计课程,不仅是对同学们动手能力的培养,同时也是在培养同学们的一种学习方法,坚持时间与理论相结合。
2、概述
单片机对于学电子或是通信等专业的学生来说并不陌生,同样,它的重要性也无需多介绍。
当前的工业控制等等控制类系统正在逐步像自动化方向,以实现自动控制,自动应答紧急情况,自动辨别多重相应并作出相应的答复为目标。
当前的许多控制系统也是实现了某一些功能。
像常用的控制芯片有ATMEL公司的89系列单片机,还有更复杂一些的DSP数字处理芯片,因特尔公司的电脑CPU芯片等等。
单片机课程设计主要是将理论与实践相结合的一次过程,通过自己设计单片机外围电路,并且编写相应的控制程序来实现预定的功能。
这是一次很好的实践机会。
2.1、基于89C51电子时钟设计目的
学习单片机最重要的方法就是实现理论与实践相结合的学习方法。
有些工程师说过,能利用单片机设计并实现电子时钟,技能基本上掌握单片机的使用。
所以设计电子时钟的真正目的不在于设计出成品而投入使用,而是在于熟悉单片机的基本功能与编程来实现单片机的控制。
作为大学生,以后出去就业或是继续学业,都要有一定的动手能力和实践能力,而这,便是电子时钟设计的另一个目的。
2.2、课程设计的组成部分
1、程序框图的设计
2、设计功能框图
提供外部时钟震荡
电压数据从单片机
提供5v至1602显示
通过键盘扫描
来实现对时间
的调节
分析:
第一部分:
通过USB的物理特性,再通过芯片MAX232实现在线提供单片机5v电压。
第二部分:
单片机控制模块,有编写程序控制单片机引脚点位的变化来时时控制1602的显示。
第三部分:
键盘控制模块,为三个独立键盘,通过键盘的通断来控制I/O管脚电位的高低,实现人机通信。
第四部分:
显示模块,为1602液晶显示。
3、电子时钟设计的内容
3.1液晶1602显示电路的设计
1602电路连接图:
操作指令与数据代码设定:
操作时序图:
由1602液晶显示屏的各引脚功能以及时序图容易知道,在使用1602时
1号引脚接地GND。
2号引脚接到电源正极(5v)。
3号引脚为一电位器,可使用滑动变阻器来实现其功能。
4.、5、6号引脚为液晶的控制信号,EA=1,打开液晶显示;
RS为数据/指令写入端,RS=1,写入数据,RS=0则写入指令。
7-14脚为数据或指令入口,与单片机的一个I/O口相连。
3.2晶振与复位电路设计
单片机的工作需要外部固定提供的频率,才能使单片机正常的工作,复位电路是为了方便单片机调试的时候便于恢复。
复位电路由刚开始上电时,电容冲满电,并断开,当开关按下,电容放电,给RST一个脉冲,并且时间超过两个机器周期,失心符为功能。
3.3键盘电路的设计
键盘为4*4的矩阵键盘模式,键盘的八只引脚接在单片机的P3口上,通过对键盘的逐次扫描来确定是否有键被摁下,来返回值达到控制的目的。
3.4总体电路的设计
原件清单:
该电路的原件比较简单,能够实现电子时钟的设计。
通过按键盘能够实现对年月日,时分秒的控制。
使用usb供电。
3.5单片机程序设计
#include<
reg52.h>
sbitrs=P3^5;
sbitlcden=P3^4;
sbitwr=P3^6;
sbitwela=P2^6;
sbitdula=P2^7;
sbits9=P3^0;
sbits13=P3^1;
sbits17=P3^2;
sbitrd=P3^7;
ucharshi,fen,miao,nian,yue,ri;
uchartable0[]="
2020-12-21"
;
//chushihua
uchartable1[]="
00:
00:
00"
//chushihua
uchartable[]="
0123456789"
uchartemp,shi,fen,miao,nian,yue,ri,num;
voiddelay(ucharz)//延时子程序
{
uinti,j;
for(i=z;
i>
0;
i--)
for(j=110;
j>
j--);
}
voidwrrt_com(uchara)//指令函数wrtt_com
rs=1;
rs=0;
wr=1;
wr=0;
lcden=1;
P0=a;
lcden=0;
delay(5);
}
voidwrrt_date(ucharb)//数据函数wrtt——date
P0=b;
voiddisplay1(ucharadd,uchardat)//显示shifenmiao函数
ucharshi,ge;
shi=dat/10;
ge=dat%10;
wrrt_com(0x80+0x40+add);
wrrt_date(table[shi]);
wrrt_date(table[ge]);
voiddisplay2(ucharadd,uchardat)//显示yueri函数
wrrt_com(0x80+add);
voiddisplay3(ucharadd,uchardat)//显示nian函数
ucharqian,bai,shi,ge;
bai=dat/1000;
qian=dat/100%10;
shi=dat/10%10;
wrrt_date(table[qian]);
wrrt_date(table[bai]);
voidinit()//初始化时钟显示
{
wela=0;
dula=0;
nian=2012;
yue=12;
ri=21;
shi=0;
fen=0;
miao=0;
temp=0;
num=0;
rd=0;
wrrt_com(0x01);
wrrt_com(0x38);
wrrt_com(0x0c);
wrrt_com(0x06);
wrrt_com(0x80);
for(i=0;
i<
12;
i++)
{
wrrt_date(table0[i]);
//初始化日期写在1602上
delay
(1);
}
wrrt_com(0x80+0x40);
//初始化shifenmiao
for(j=0;
j<
11;
j++)
wrrt_date(table1[j]);
EA=1;
ET0=1;
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
voidclock()//时间变化扫描显示
if(miao==60)
{
miao=0;
fen++;
if(fen==60)
{
fen=0;
shi++;
if(shi==24)
{
shi=0;
ri++;
}
display1(3,shi);
}
display1(6,fen);
display1(9,miao);
if(ri==30)
ri=0;
yue++;
if(yue==30);
{
yue=0;
nian++;
display3(2,nian);
}
display2(7,yue);
display2(10,ri);
voidkeyscan()
if(s9==0)
delay(5);
if(s9==0)
while(!
s9);
num++;
if(num==1)
{
TR0=0;
wrrt_com(0x80+0x40+10);
wrrt_com(0x0f);
}
if(num==2)
wrrt_com(0x80+0x40+7);
if(num==3)
wrrt_com(0x80+0x40+4);
if(num==4)
wrrt_com(0x80+11);
if(num==5)
wrrt_com(0x80+8);
if(num==6)
wrrt_com(0x80+5);
if(num==7)
TR0=1;
wrrt_com(0x0c);
num=0;
if(num!
=0)
if(s13==0)
delay(5);
if(s13==0)
{
while(!
s13);
if(num==1)
{
miao++;
wrrt_com(0x06);
display1(9,miao);
wrrt_com(0x80+0x40+10);
wrrt_com(0x0f);
if(miao==60)
{
miao=0;
}
}
if(num==2)
fen++;
display1(6,fen);
wrrt_com(0x80+0x40+7);
if(fen==60)
fen=0;
}
if(num==3)
shi++;
display1(3,shi);
wrrt_com(0x80+0x40+4);
if(shi==24)
shi=0;
if(num==4)
ri++;
display2(10,ri);
wrrt_com(0x80+11);
if(ri==30)
ri=0;
if(num==5)
yue++;
display2(7,yue);
wrrt_com(0x80+8);
if(yue==12)
yue=0;
if(num==6)
nian++;
display3(2,nian);
wrrt_com(0x80+5);
delay
(1);
}
}
if(s17==0)
if(s17==0)
s17);
miao--;
fen--;
shi--;
ri--;
yue--;
nian--;
voidmain()
init();
while
(1)
if(TR0==1)
{
clock();
keyscan();
voidtimer0()interrupt1
temp++;
if(temp==20)
temp=0;
miao++;
4、总结
4、1遇到的问题与解决办法:
这次的单片机课程设计出现的最主要的问题就是如何实现通过键盘对时间的调整,难度在于如何从过c语言编写程序来实现,并且要与前面的显示电路,以及控制电路的协调工作。
遇到而第二个难题就是如何实现键盘的扫描程序。
键盘扫描这个问题主要是通过网络来解决的。
通过观看网络上面的视屏教程,学会了如何通过扫描,返回函数值来确定是否有键按下。
通过键盘来实现对时间的调整这个难题是通过相互讨论来完成的。
我们先确定要用的按键有那几个,初步确定为三个,一个功能键,一个时间加,一个时间减。
再通过中断以及1602显示程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 89 c51 单片机 课程设计