单片机课程设计报告数码管流水灯设计_第1页
单片机课程设计报告数码管流水灯设计_第2页
单片机课程设计报告数码管流水灯设计_第3页
单片机课程设计报告数码管流水灯设计_第4页
单片机课程设计报告数码管流水灯设计_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机课程设计报告第一章 基础设计报告31.1设计题目 数码管流水灯设计31.2 设计任务31.3 程序流程:31.4 proteus模拟实验电路41.5 编写实验程序51.6 实验程序9第二章 提高设计报告112.1 设计题目 基于单片机数字电压表设计112.2 设计任务112.3 程序流程图112.5 设计硬件电路122.6 程序代码:152.7 仿真结果172.8 误差分析172.9 实验所遇到的问题以及相应的处理18第三章 提高设计报告任务说明书183.1 小组成员及学号183.2 本人工作任务详细说明18第四章设计心得19参考文献:19第一章 基础设计报告1.1设计题目 数码管流水灯

2、设计1.2 设计任务 结合单片机原理知识,运用at89c51单片机来设计一款简单的数码流水灯,并结合u vision 4和 isis 7 professional两款软件来设计和模拟。利用at89c51单片机来控制发光二极管的点亮和熄灭,实现延时和循环移位。用单片机at89c51的一个端口接8位用逻辑显示的发光二极管,设计程序,使发光二极管从右向左依次轮流点亮。1.3 程序流程:开始p1口初值亮第一个灯延时p1口左移一位逐次点亮结束图1.1实验程序流程图1.4 proteus模拟实验电路 图1.2 proteus实验电路模拟(1)启动proteues软件,获取所需的器件。 图1.1 图1.3

3、proteus 拾取元件(1)(2)打开库后,输入at89c51,查找到at89c51芯片,双击添加到实验图示中。 图1.4 proteus 拾取元件(2)同理,还添加所需的电容(cap、cap-pol)、电阻(resistor)、晶振(crystal)、发光二极管(led-blue)、74ls373等。(3) 按照图1.2所示连接电路图。1.5 编写实验程序(1)打开keil程序,选择工程菜单。1.5 keil程序 (2)选择新建uvision工程,保存为工程名称。 图1.6 新建uvision工程图1.7 选择at89c51芯片(3) 选择atmel公司的 at89c51设备。(4)新建一

4、个程序,并保存其后缀名为.asm(若是用c语言编写,其后缀名保存为.c) 图1.8 新建程序文本图1.9 保存程序并更改后缀名为.asm(5)增加程序文本到源组。图1.10添加程序文本(6)编译程序之前,在闪存菜单设置选项中选择输出选项,在产生hex文件前打钩即可。图1.54产生hex文件图1.11产生hex文件1.6 实验程序 (1)编写汇编程序 org 00hloop: mov a,#0feh /赋初始值 mov r2,#8 /设计数值output: mov p1,a /送p1口输出 rl a /数据移位 acall delay djnz r2,output ljmp loopdelay:

5、 mov r6,#0 /延时程序 mov r7,#0delayloop: djnz r6,delayloop djnz r7,delayloop ret end(2)调试与运行:通过右击单片机,选择编辑属性,导入程序 图1.12 向单片机导入程序(3) 点击运行,仿真实验 图1.13 实验仿真结果 第二章 提高设计报告2.1 设计题目 基于单片机的数字电压表设计2.2 设计任务 设计单片机主电路、数据采集接口电路、数码管显示电路,能够实现对电压的测量及显示,电压精确到小数点后一位。开始2.3 程序流程图 开中断初始化 启动a/d转换 是延时eoc是否为零中断程序否输出转换的数据 显示结果图2.

6、1 主程序流程图2.4设计步骤:1) 根据设计要求来确定设计思路。2) 根据设计要求查找相应芯片参数,确定所需要的器件。3) 设计硬件电路。4) 根据电路图编写程序。2.5 设计硬件电路(1) 复位电路 图2.2 复位电路 复位端与计算机的复位键的功能类似。当系统正在运行或者计算机死机时,只要按下复位键,计算机就会重新启动。当打开单片机系统的电源开关时,vcc的电压瞬间变为+5v,电解电压的电容突变相当于短路,于是vcc(高电平)相当于直接加到了rst端。正是这个加在rst上的瞬间高电平使得单片机复位。很快,电容充满电,在电路中相当于断路,于是rst由高变成低,单片机开始执行程序。按键相当于手

7、动复位,当按键闭合时,单片机的rst端接高电平vcc,从而单片机复位。(2) 时钟信号 图2.3 外部时钟信号电路这个电路构成了单片机的一个时钟信号源,作为单片机的工作时序。这种使用晶振配合产生时钟信号的方法称为内部时钟方式。晶振的频率决定了该系统的时钟频率。根据系统对速度的要求,一般可选择1.2m12mhz的晶振,电容c1和c2容量可选取2040pf。除了内部时钟外,还可以利用外部信号源直接向单片机提供时钟信号,这时应当把外部时钟信号输入到xtal2脚上,xtal1接地,而这时外部振荡信号一般选择低于12mhz的方波信号。(3)ad0808芯片接法 图2.4 adc0808芯片接法adc08

8、08引脚功能l in0in7: 模拟量输入通道。l adda 、addb、 addc:地址线,它决定转换通道。l ale:地址锁存信号。l start:转换启动信号。start为上升沿,所有内部寄存器清零,start为下降沿,启动a/d转换。l out1out8:数据输出端,为三态缓冲输出。l oe:输出允许端。oe=0,输出禁止。oe=1,输出允许。l clk:时钟信号,频率小于750khz的时钟信号。l eoc:转换结束信号。系统启动前eoc=1,系统启动后eoc=0,当eoc=1时,表示转换结束。l vref:参考电压,典型值为+5v。adc0808主要参数l 分辨率:8l 转换时间:1

9、00usl 转换路数:8l 标准电压:5vl 时钟频率:750khzl 输入为05vl 输出具有锁存l 功耗:15mvl 非调整误差位:+lsb或-lsb(4) 数码管显示(采用的是共阳极数码管) 图2.5 数码显示电路(5) 完整电路图 图2.6 基于单片机设计的数字电压表电路2.6 程序代码:#include#include#define uint unsigned int#define uchar unsigned char#define port p0sbit start=p25;sbit eoc=p26;sbit oe=p27;sbit clock=p24;sbit p21=p21;

10、sbit p22=p22;/*数码管显示字符组*/uchar code num=0xc0,/*0*/ 0xf9,/*1*/ 0xa4,/*2*/ 0xb0,/*3*/ 0x99,/*4*/ 0x92,/*5*/ 0x82,/*6*/ 0xf8,/*7*/ 0x80,/*8*/ 0x90,/*9*/ ; /共阳极数码管/*定义中断程序*/void int1(void)interrupt 1 using 1 clock=clock;/*定义延时程序*/void delay(void) uchar i,j; for(i=25;i0;i-);for(j=100;j0;j-);/*声明数码显示函数*/v

11、oid display(uint sw,uint gw);void main()uchar date;uint sw,gw;ie=0x82; /开中断,ea=1,允许t0中断tmod=0x02; / 设置工作方式,工作方式2,自动重装初值th0=245; /设置初值tl0=0; / /计数溢出,置位溢出中断标志位tr0=1; /启动t0for(;) start=0; /adc转换器启动信号,上升沿将逐次毕竟寄存器清零,下降沿启动adc转换start=1;start=0;delay();while(eoc=0);/eoc为高时,表示转换结束,为低时表示正在转换。将eoc作为中断请求信号oe=1;

12、/输出转换得到的数据date=p1;sw=date/51;gw=(date%51)%10;display(sw,gw) ;/*数码管显示程序*/void display(uint sw,uint gw) /*显示数码管一*/ p21=1; port=numsw&0x7f; delay(); p21=0; /*显示数码管二*/p22=1; port=numgw|0x80; delay(); p22=0; 2.7 仿真结果 图2.7 实验电路仿真结果 通过外接一个一个滑动变阻器来模拟数字电压表的两个测电压端。2.8 误差分析(1) adc0808芯片的精度限制会带来一定的误差,这部分误差会影响到模

13、数转换输出的结果。(2) adc0808转换后输出的二进制,而得到的二进制转换成十进制时往往不是模拟的电压值,这时需要我们在主程序做相应的处理,将其转换出的结果和模拟电压值相对应。在此实验中,电压的量程为5v,的转换位数为.模拟电压值与转换后二进制存在一个比例为:().而在这主程序中我们所做的转换处理会带来本次实验的误差。(3) 在此次实验中,我们只精确到小数一位,在程序中的四舍五入也会带来一定的误差。2.9 实验所遇到的问题以及相应的处理()在最开始时,我们采用的是串行的方式输入数据,而在最后输出显示部分,完全不能正确的显示。我的判断是在到单片机中没有串并转换的器件,努力尝试的更改电路后,比

14、预想的还要困难,所以最终选择的是用并行的芯片来做模数转换。() 数码显示部分是问题最多的地方,其一就是因为人眼的视觉特性,导致延时设定不合适而出现视觉闪烁现象。最后我在查阅了相关资料后,将延时设置为其二,显示数码管相应位数时,问题也特别多,也是不能正确显示出。尤其是在数码管的位数相应比较多的情况。显示程序部分就很有很大的问题。在主程序中我采用的是无符号整型和无符号字符型,而其中将其进行强制转换成浮点型来处理,但是在后的数码管显示部分仍然是不正确的读数,而其中检查模数转换部分是正确的,我判断的是主程序中处理数据部分和数码管显示子程序的问题。最后采用一种比较折中的办法,将数码管的显示位数减少为两位

15、,小数精确到一位。() 的时钟信号供给。从始至终我没有想用外部电路来控制时钟信号。基于单片机的可控制性,我还是采用了通过单片机的口来控制。而这部分也是一个比较大的难题。外接电路究竟要怎么接?是直接连到单片机上?还是需要一些器件来共同连接?最后参考到一些单片机控制的相关程序而选择用中断的方式来供给芯片时钟信号。 第三章 提高设计报告任务说明书3.1 小组成员及学号姓名学号赵林0807040118唐棋08070401253.2 本人工作任务详细说明本次实验,我主要负责软件部分,通过已建立的电路来编写单片机的控制程序,并协同同伴修改出错的电路。在此程序采用的通过中断给adc0808一个时钟信号。在此

16、之间我们需要将中断打开,即在ie、tmod设置数值。而中断程序是给clock取反。通过这种方式而产生一个脉冲。在主程序中,先给start置低,再置高,从而形成一个上升沿,adc0808内部寄存器清零。再置低,形成一个下降沿,启动a/d转换。然后使能oe=1,输出转换的数据到p1口。处理数据后,调用显示数码管子程序,即将模数转换的结果输出到数码管显示。第四章设计心得 这次设计尤其是在编写程序部分是一个比较大的挑战。其中遇到了许多困难。刚开始时,我对整个软件的操作都显得不那么的熟悉。而后,在如何选择芯片上遇到了困难。我不知道应该是基于什么样的标准去选择芯片。所以最后我选择了我们常用的的芯片。在设计电路时,有时需要给一个上拉电阻,有时又不需要,这也只有在一步一步的仿真后,通过观察相应端口的高低电平来判断的。对于很少编程的我是努力的不断的看程序,不断的模仿,不断的设计,不断的改进,才最终设计完此次实验。在面对问题时,我们应该

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论