单片机课程设计报告Word下载.docx
- 文档编号:21828825
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:11
- 大小:83.44KB
单片机课程设计报告Word下载.docx
《单片机课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《单片机课程设计报告Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
九、设计制作过程-----------------------------------------11
十、总结-------------------------------------------------12
一、课程设计的目的
本课程设计是生物医学工程专业学生在学完单片机原理及课程之后必修课程,它的教学目的和任务是综合利用所学单片机知识完成一个单片机应用系统设计并在实验室实现,从而加深对单片机软硬知识的理解,获得初步的应用经验,为走出校门从事单片机应用的相关工作打下基础。
二、课程设计具体要求
利用单片机的定时/计数器,中断系统,发光二级管,以及LED显示器进行设计。
用数码管显示计数,设计创意流水灯,并且实现串口通信。
用定时/计数器T0,工作于计数状态,采用方式1,对12MHZ的系统时钟进行计数。
用P1口控制流水灯的亮灭,P3口控制定时计数器,P0口控制LED数码管的显示。
P2口实现串口通信。
三、MCS-51单片机系统简介
单片机应用系统由硬件系统和软件系统两部分组成。
硬件系统是指单片机以及扩展的存储器、I\O接口、外围扩展的功能芯片以及接口电路。
软件系统包括监控程序和各种应用程序。
在单片机应用系统中,单片机是整个系统的核心,对整个系统的信息输入、处理、信息输出进行控制。
与单片机配套的有相应的复位电路、时钟电路以及扩展的存储器和I\O接口,使单片机应用系统能够运行。
在一个单片机应用系统中,往往都会输入信息和显示信息,外部开关或按键和显示器。
显示器是发光二级管和LED数码管。
四、MCS-51单片机内部定时器\计数器、中断系统简介
(1)、定时器\计数器
1、MCS-51系列中51子系列有两个16位的可编程定时\计数器可:
定时\计数器T0和定时\计数器T1。
它由加法计数器、方式寄存器TMOD、控制寄存器TCON等组成。
方式寄存器用于设定定时计数器T0和T1的工作方式,控制寄存器用于对定时计数器启动、停止进行控制。
2、每个定时计数器既可以对系统时钟计数实现定时,也可以外部信号计数实现计数功能通过编程设定来实现。
3、每个定时计数器都有多种工作方式,其中T0有四种工作方式,T1有三种工作方式,T2有三种工作方式。
通过编程可设定工作于某种方式。
四种工作方式为:
13位定时\计数器、16位定时\计数器、8位自动重置定时\计数器、两个8位定时\计数器(只有T0有)
4、每一个定时计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。
(2)中断系统:
1、MCS-51单片机提供5个硬件中断源,2个外部中断源,2个定时计数器T0和T1的溢出中断TF0和TF1,1个串行口发送TI和接收RI中断。
2、MCS-51单片机中没有专门的开中断和关中断指令,对各个中断源的允许和屏蔽是由内部的中断允许寄存器IE的各位来控制的。
中断允许寄存器IE的字节地址为A8H,可以进行位寻址。
系统复位时,中断允许寄存器IE的内容为00H,如果要开放某个中断源,则必须使IE中的总控置位和对应的中断允许位置“1”。
3、MCS-51单片机有5个中断源,为了处理方便,每个中断源有两级控制,高优先级和低优先级。
通过由内部的中断优先级寄存器IP来设置,中断优先级寄存器IP的字节地址为B8H,可以进行位寻址。
如果某位被置“1”,则对应的中断源被设为高优先级;
如果某位被清零,则对应的中断源被设为低优先级。
对于同级中断源,系统有默认的优先权顺序,从高到低优先权顺序为外部中断0、定时计数器T0中断、外部中断1、定时计数器T1中断、串行口中断。
通过设置中断优先级寄存器IP能够改变系统默认的优先级顺序。
4、MCS-51单片机响应中断的条件为:
中断源有请求且中断允许。
五、LED数码管显示器简介
LED数码管显示器:
在单片机应用系统中,经常用到LED数码管作为显示输出设备,LED数码管显示器虽然显示信息简单,但它具有显示清晰、亮度高、使用电压低、寿命长、与单片机接口方便等特点,基本上能够满足单片机应用系统的需要,所以在单片机应用系统中经常用到。
LED数码管显示器是由发光二极管按一定的结构组合起来的显示器件。
在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种。
所谓译码方式是指由显示字符转换得到对应的字段码的方式。
对于LED数码管显示器,通常的译码方式有两种:
硬件译码方式和软件译码方式。
LED数码管在显示时,通常有两种显示方式:
静态显示方式和动态显示方式。
在使用时可以把它们组合起来。
在实际应用时,如果数码管个数较少,通常用硬件译码静态显示,在数码管个数较多时,则通常用软件译码动态显示。
六、软时钟的基本原理
软时钟是利用单片机内部的定时器\计数器来实现的,它的处理过程如下:
首先设定单片机内部的一个定时器\计数器工作于定时方式,对机器周期计数形成基准时间,然后用另一个定时器\计数器或软件计数的方法对基准时间计数形成秒,秒计60次形成分,分计60次形成小时,小时计24次则计满一天。
然后通过数码管把它们的内容在相应位置显示出来即可。
数码管显示可以采用静态显示方法或动态显示方法。
静态显示方法需要数据锁存器等硬件,接口复杂,时钟显示一般用6个或8个数码管。
由于系统没有其他的复杂的任务处理,而且显示的时钟信息随时都可能变化,一般采用动态显示方式。
动态显示方法线路相对简单,但需动态扫描,扫描频率要大于人眼视觉暂留频率,信息看起来才稳定。
译码方式可分为软件译码和硬件译码,软件译码通过译码程序查得显示信息的字段码;
硬件译码通过硬件译码器得到显示信息的字段码,实际中通常采用软件译码。
在具体处理时,定时器计数器采用中断方式工作,对时钟的形成在中断服务程序中实现。
在主程序中只需对定时器计数器初始化、调用显示子程序和控制子程序。
另外,为了使用方便,设计了简单的按键,可以通过按键实现时、分的调整,这样在主程序中就加入了键盘设置子程序。
七、系统硬件电路的设计
本系统的硬件主要包括单片机芯片、数码管显示、按键开关等电路,它的硬件电路如下图所示:
八、系统软件程序的设计
整个流水灯系统由主程序和子程序组成,主程序程序包含初始化参数设置、按键处理、数码管显示模块等,在设计时各个模块都采用子程序结构设计,在主程序中调用。
由于定时器/计数器采用中断方式处理,因此还要编写定时器/中断服务子程序,在定时器/计数器中断服务程序中对时钟进行调整。
1.主程序
主程序执行流程如图1,主程序先对显示单元和定时器/计数器初始化,然后重复调用数码管显示模块和按键处理模块,当有键按下,则转入相应的功能程序。
2.数码管显示模块
本系统共用8个数码管,从右到左依次显示千位、百位、十位、个位。
采用软件译码动态显示。
3.定时器/计数器T0中断服务程序
定时器/计数器T0用于时间计时。
选择方式1,重复定时,定时时间设为50ms,定时时间到则中断,在中断服务程序中用一个计数器对50ms计数,计20次则对秒单元加1,秒单元加到60则对分单元加1,同时秒单元清0;
分单元加到60则对时单元加1,同时分单元清0;
时单元加到24则对时单元清0,标志一天时间计满。
在对各单元计数的同时,把它们的值放到存储单元的指定位置。
定时器/计数器T0中断服务程序流程图如图2。
图1主程序流程图图2定时器/计数器T0中断服务程序流程图
4.串口通信模块
首先,通过串口把时间数据发送到计算机,计算机可以直观的查看显示数据。
其次,通过在串口调试助手中发送数据进行流水灯程序的控制。
1,流水灯功能检测实现,全亮。
2,流水灯功能1实现,依次亮。
3,流水灯功能2实现,两个依次亮。
4,流水灯功能3实现,依次全亮,之后全灭。
5.C语言源程序清单
;
采用8位LED软件译码动态显示程序
使用AT89C51单片机,12MHZ晶振,P0输出字段码,P2口输出位选码,用共阳
LED数码管,P1口控制流水灯。
片内RAM的70H到77H单元为LED数码管的显示缓冲区
78H,79H,7AH,7BH为计数单元
7BH为50ms计数器,7CH为调时按键计数器
#include<
REGX51.H>
#defineucharunsignedchar
#defineuintunsignedint
inti=0,c=0,time=0;
intseg_g=0,seg_s=0,seg_b=0,seg_q=0;
intled_lsd1[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
intled_lsd2[8]={0xfc,0xf9,0xf3,0xe7,0xcf,0x9f,0x3f,0x3f};
intled_lsd3[8]={0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,0xff};
ucharled_seg[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
intled_ctr[3]={0xef,0xdf,0xbf};
uintldata=0,rec=0;
uintgg=0,gs=0,gb=0;
voiddelay(){
uintms=10;
while(ms--);
}
voidinit(){
IE=0x9A;
//开中断
TMOD=0x21;
//中断定时初始化
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
SCON=0x50;
//串口方式1
TL1=0xfd;
//9600波特率的初值,板子使用11.059M晶振
TH1=0xfd;
//初值
TR1=1;
//启动波特率发生
voidtimer0()interrupt1//定时50ms
{
TH0=0x3C;
//TH0=(65536-50000)/256;
TL0=0xB0;
//TL0=(65536-50000)%256;
time++;
voidcom_isr(void)interrupt4
{
if(RI){//是接收中断处理
RI=0;
//将寄存器复位等待接收下一个
ldata=SBUF;
//将接收的数据存于变量中
rec=ldata;
}
voidsends(uintc){//串口发送子程序
SBUF=c;
while(TI==0);
//等待发送完成
TI=0;
voidmain(){
init();
while
(1){
switch(rec){//控制流水灯量的方式
case0:
P1=0x00;
break;
case1:
P1=led_lsd1[i];
case2:
P1=led_lsd2[i];
case3:
P1=led_lsd3[i];
default:
}
//扫描个位
P2=led_ctr[c];
P0=led_seg[seg_g];
c++;
delay();
//扫描十位
P0=led_seg[seg_s];
delay();
//扫描百位
P0=led_seg[seg_b];
c=0;
//一遍扫描结束
if(time==20){
time=0;
gg++;
i++;
seg_g++;
if(seg_g==10){
seg_s++;
seg_g=0;
gs++;
gg=0;
if(seg_s==6){
seg_b++;
seg_s=0;
gb++;
gs=0;
if(i==8)i=0;
sends(gb);
sends(gs);
sends(gg);
九、设计制作过程
(1)、在KEIL51中:
1)、输入源程序,保存为*.c文件
2)、创建项目文件
3)、给项目添加.c程序文件
4)、仿真环境设置,在project菜单下的Optionsfortarget‘Target1’命令,选择Output选项卡,勾选生成HEX文件。
5)、编译、链接项目,形成目标文件.HEX
(2)、在PROTEUS中
1、设计硬件
PROTEUS软件使用过程如下:
1)选择元器件
2)放置元器件
3)连线
4)添加程序
5)运行仿真
2、在PROTEUS中把HEX文件加载到单片机芯片上。
3、运行仿真看结果。
元器件清单如下:
单片机:
AT89C51
按键:
BUTTON
电阻:
RES
电容:
CAP
晶振:
CRYSTAL
发光二级管:
LEDRED
LED数码管:
7SEG-MPX8-CA-BLUE(CA:
共阳,CC:
共阴)
地:
GRAND
电源:
POWER
十、总结
通过此次课程设计让我认识到,大多数设计类型软件有很多相通之处,重点在于多去用,多实践,这样才能把学的知识转化成自己的东西。
这次的课程设计,了解了KeilC51集成环境和PROTEUS仿真软件的使用,用此软件练习电子时钟的设计,不仅能够掌握此软件的使用方法,而且对单片机C语言设计有了更深的理解。
仿真实现了把抽象的东西具体化,把理论和实际结合起来,更利于对单片机程序的理解掌握。
在本次实践设计过程中,感觉最难的是串口通信,为了实现这个功能,我及我的队员努力了很久,付出很多,收获也颇丰。
在以前的实验中,一般是实现流水灯或者是实现数码管的简单显示,而这次,我们不但要实现流水灯的控制,而且还是在实现动态显示数码管的基础上,这就要求我们对动态显示数码管很熟悉,之后在去实现流水灯,这样做出来的效果要好些。
而实现数码管的显示就要求要会定时器的使用。
而实现流水灯的功能控制,就要求对串口通信熟悉。
总而言之,这次可能设计是一次综合性极强的锻炼,收获很大。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单片机 课程设计 报告