简易数字电压表河北工程.docx

上传人:b****8 文档编号:9599496 上传时间:2023-02-05 格式:DOCX 页数:23 大小:1.03MB
下载 相关 举报
简易数字电压表河北工程.docx_第1页
第1页 / 共23页
简易数字电压表河北工程.docx_第2页
第2页 / 共23页
简易数字电压表河北工程.docx_第3页
第3页 / 共23页
简易数字电压表河北工程.docx_第4页
第4页 / 共23页
简易数字电压表河北工程.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

简易数字电压表河北工程.docx

《简易数字电压表河北工程.docx》由会员分享,可在线阅读,更多相关《简易数字电压表河北工程.docx(23页珍藏版)》请在冰豆网上搜索。

简易数字电压表河北工程.docx

简易数字电压表河北工程

信息与电气工程学院

课程设计说明书

(2012/2013学年第二学期)

 

课程名称:

单片机应用

题目:

简易直流数字电压表

专业班级:

自动化10-**

学生姓名:

***

学号:

*********

指导教师:

苗敬利等

设计周数:

2周

设计成绩:

2013年6月26日

 

目录

1.课设目的1

1.1.设计意义.................................................1

1.2.系统功能要求.............................................1

2方案设计.1

2.1系统的设计任务...........................................2

2.2软硬件开发环境............................................4

3硬件设计5

3.1CD4511简介..............................................5

3.2CD4511引脚图真值表.......................................6

3.3AD转换..............................................7

4软件设计7

4.1主程序设计...............................................7

4.2模块程序设计.............................................8

5系统调试与仿真8-11

6课程设计总结11-13

7附录14

附录7.1硬件原理图..........................................15

附录7.2程序清单............................................16

8参考文献.............................................17

9元件清单..............................................17

附表

 

1:

课程设计目的 

1.1.1设计意义:

用STC90C52AD单片机作为核心控制器,设计简易直流电压表。

合理分配地址,编写系统程序。

我们这里设计的简易直流电压表没有使用特别多的、复杂的元器件,只是一个单片机控制系统和数码管附加驱动器件。

1.1.2系统功能要求

我们利用单片机内部AD转换,通过C语言编程,实现将由电位器采集的模拟电量,(0V-5V)转换为数字电量,然后通过数码管显示。

它的特点是电路简单、制作方便、操作简单、性能可靠。

2:

方案设计

2.1:

系统设计任务:

基于STC90C52AD单片机的最小系统设计,设计简易直流电压表,3位数码管显示控制方案  

①确定总体设计方案;②设计显示电路;③合理分配地址,编写系统程序;④利用Protel设计硬件原理图;⑥软硬件联机调试。

2.1.1:

开发软件Keil C51 uVision3简介 

Keil uVISION2 是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS-51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持、PLM、汇编和C语言的程序设计,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。

Keil C51集成开发环境主要由菜单栏、工具栏、源文件编辑窗口、工程窗口和输出窗口五部分组成。

工具栏为一组快捷工具图标,主要包括基本文件工具栏、建造工具栏和调试工具栏,基本文件工具栏包括新建、打开、拷贝、粘贴等基本操作。

建造工具栏主要包括文件编译、目标文件编译连接、所有目标文件编译连接、目标选项和一个目标选择窗口。

调试工具栏位于最后,主要包括一些仿真调试源程序的基本操作,如单步、复位、全速运行等。

在工具栏下面,默认有三个窗口。

左边的工程窗口包含一个工程的目标(target)、组(group)和项目文件。

右边为源文件编辑窗口,编辑窗口实质上就是一个文件编辑器,我们可在这里对源文件进行编辑、修改、粘贴等。

下边的为输出窗口,源文件编译之后的结果显示在输出窗口中,会出现通过或错误(包括错误类型及行号)的提示。

如果通过则会生成“HEX”格式的目标文件,用于仿真或烧录芯片。

基本环境如图2-1所示:

 

MCS-51单片机软件Keil C51开发过程为:

 ①建立一个工程项目,选择芯片,确定选项。

 ②建立汇编源文件或C源文件。

 ③用项目管理器生成各种应用文件。

 ④检查并修改源文件中的错误。

 

⑤编译连接通过后进行软件模拟仿真或硬件在线仿真。

 

2.2:

单片机程序烧写软件 

STC90C52AD系列单片机大部分具有在系统可编程特性,单片机在用户系统上即可现在烧录用户程序,而无需将单片机从已经生产好的产品上拆下,在用通用编程器进行烧写程序。

大部分STC90C50AD系列单片机在销售给用户之前已经在单片机系统内部固化啦ISP系统引导程序配合PC端得控制程序即可将用户的程序代码下载进单片机内部,故无需编程器烧写程

显示电路中单片机STC90C52AD的P2口,通过总线驱动74LS245直接驱动8段数码管,

完成字形码的输出(字形选择)。

而P1.0-P1.2控制3位数码管的位选信号。

当P1.0-P1.2为低电平时PNP的三极管选通,通过给P2口赋不同的段选值,数码管显示不同的数字。

低电平点亮数码管。

 

由于各位的段码线并联,P2口输出的段码对各个显示位来说都是相同的,但是数字电压表要求第一位带有小数点,所以第一个数码管要对小数点显示程序进行设计。

 

数码管动态显示,即在某一时刻,只让某一位的位选线处于选通状态,而其他各位的位选处于关闭状态,这样,在同一时刻,3位LED中只有选通的那一位显示出字符,而其他三位则是熄灭的。

同样,虽然这些字符是在不同时刻出现的,而在同一时刻,只有一位显示,其他各位熄灭,但由于LED显示器的余晖和人眼的视觉暂留作用,每位显示间隔时间较短,造成各位同时亮的假象,达到显示的效果。

 

3:

CD4511

3.1:

CD4511是一个用于驱动共阴极 LED (数码管)显示器的 BCD 码—七段码译码器,特点:

具有BCD转换、消隐和锁存控制、七段译码及驱动功能的CMOS电路能提供较大的拉电流。

可直接驱动LED显示器。

CD4511 是一片 CMOS BCD—锁存/7 段译码/驱动器,引脚排列如图 2 所示。

其中a b c d 为 BCD 码输入,a为最低位。

LT为灯测试端,加高电平时,显示器正常显示,加低电平时,显示器一直显示数码“8”,各笔段都被点亮,以检查显示器是否有故障。

BI为消隐功能端,低电平时使所有笔段均消隐,正常显示时, B1端应加高电平。

另外 CD4511有拒绝伪码的特点,当输入数据越过十进制数9(1001)时,显示字形也自行消隐。

LE是锁存控制端,高电平时锁存,低电平时传输数据。

a~g是 7 段输出,可驱动共阴LED数码管。

另外,CD4511显示数“6”时,a段消隐;显示数“9”时,d段消隐,所以显示6、9这两个数时,字形不太美观 图3是 CD4511和CD4518配合而成一位计数显示电路,若要多位计数,只需将计数器级联,每级输出接一只 CD4511 和 LED 数码管即可。

所谓共阴 LED 数码管是指 7 段 LED 的阴极是连在一起的,在应用中应接地。

限流电阻要根据电源电压来选取,电源电压5V时可使用300Ω的限流电阻。

 

3.2

3.3.

4.软件设计

4.1.主程序设计

4.2:

数码显示模块程序如下:

 

void display(ulong i)//数码管显示函数

{

 uint a=0,b=0;  uchar table0[10]={0X21,0X7D,0X13,0X19,0X4D, 0X89,0X81,0X3D,0X01,0X09};  //0~9段码  

uchar table1[3]={0XFE,0XFD,0XFB};      //三个数码管的位码   

uchar table2[3]={0,0,0};  t

able2[0]=i/100;  

table2[1]=i%100/10; 

 table2[2]=i%10;  

for(b=0;b<50;b++)  

{   

for(a=0;a<3;a++)   

{

P0=table1[a]; 

   P2=table0[table2[a]];    

if(a==0) 

   P2=table0[table2[a]]-0X01;  //是第一个数后面显示小数点   

 delay

(1); 

   } 

 } 

LED灯显示通过P1口连接,当P1口给低电平时,灯亮。

 

5.系统调试与仿真

5.1:

系统的工作原理 

本简易数字电压表的主要功能是通过将模拟量的输入通过AD转换方式,并通过数码管显示的控制方案,并附带了单片机和PC机之间通讯接口(烧写程序用的串口,与PC机实现通信

实际也是经过串口来进行数据的通信)。

系统结构包括单片机最小控制系统部分、驱动电路、数码管显示电路。

5.2 :

STC90C52AD单片机简介 

对于单片机的选择,可以考虑使用8031与8051系列,由于8031没有内部RAM,系统又需要大量内存存储数据,因而不适用。

所以,我们选用51系列单片机STC90C52AD。

STC90C52AD是中国宏晶公司生产的低功耗,高性能8位单片机,片内含8KB的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚,并集成了 Flash 程序存储器,既可在线编程(ISP),也可用传统方法进行编程,因此,低价位STC90C52AD单片机可应用于许多高性价比的场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。

该单片机还内部带有8路10位的AD模数转换电路,省去本系统运用AD采集数据二需要外接专门的AD转换芯片的麻烦,是得系统设计更为简单。

单片机STC90C52AD具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

利用单片机STC90C52AD设计一个数字电压表,能够测量0-5V之间的直流电压值,三位数码显示。

STC90C52AD单片机是新一代的超强抗干扰/高速/低功耗的单片机,指令代码完全兼容系统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率12MHZ以下时,复位脚可直接接地。

本次试验应用了该单片机的A/D转换模块和显示模块。

 

STC90C52AD具有如下特点:

(1)增强型6时钟/机器时钟,12时钟/机器时钟 8051 CPU;

(2)工作电压:

5.5V-3.8V/3.6V-2.4V;(3)工作频率范围:

0-40MHZ,相当于普通8051的0-80MHZ;(4)片上集成 256+4096字节RAM;(5)通用I/O口,复位后为:

P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O口)P0口是开端输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻;(6)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿STC90C52AD是中国宏晶公司生产的低功耗,高性能8位单片机,片内含8KB的可编程的Flash只读程序存储器,兼容标准8051指令系统及引脚,并集成了 Flash 程序存储器,既可在线编程(ISP),也可用传统方法进行编程,因此,低价位STC90C52AD单片机可应用于许多高性价比的场合,可灵活应用于各种控制领域,对于简单的测温系统已经足够。

该单片机还内部带有8路10位的AD模数转换电路,省去本系统运用AD采集数据二需要外接专门的AD转换芯片的麻烦,是得系统设计更为简单。

单片机STC90C52AD具有低电压供电和体积小等特点,四个端口只需要两个口就能满足电路系统的设计需要,很适合便携手持式产品的设计使用系统可用二节电池供电。

利用单片机STC90C52AD设计一个数字电压表,能够测量0-5V之间的直流电压值,三位数码显示。

STC90C52AD单片机是新一代的超强抗干扰/高速/低功耗的单片机,指令代码完全兼容系统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择,内部集成MAX810专用复位电路,时钟频率12MHZ以下时,复位脚可直接接地。

本次试验应用了该单片机的A/D转换模块和显示模块。

 

STC90C52AD具有如下特点:

(1)增强型6时钟/机器时钟,12时钟/机器时钟 8051 CPU;

(2)工作电压:

5.5V-3.8V/3.6V-2.4V;(3)工作频率范围:

0-40MHZ,相当于普通8051的0-80MHZ;(4)片上集成 256+4096字节RAM;(5)通用I/O口,复位后为:

P1/P2/P3/P4是准双向口/弱上拉(普通8051传统I/O口)P0口是开端输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻;(6)ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/仿真器,可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3-5秒即可完成一片;(7) EEPROM功能和看门狗电路;(8)内部集成MAX810专用复位电路,时钟频率12MHZ以下时,复位脚可直接接地;(9)通用异步串行口(UART),还可用定时器软件实现多个UART;(10)工作温度范围:

0-75℃/-40-+85℃;(11)封装:

 LQFP-44,PDIP-40,PLCC-44。

 

5.3:

 STC90C52AD单片机的引脚功能以及最小控制系统 

单片机芯片STC90C52AD为40引脚双列直插式封装。

其各个引脚功能介绍如下,芯片STC90C52AD的引脚排列和逻辑符号如图4-2 所示。

各引脚分别为:

 

①VCC:

供电电压 ②GND:

接地 ③P0口 

P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。

当P1口的管脚写1时,被定义为高阻输入。

P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。

要是P0口输出高电平,必须外接上拉电阻。

 

④P1口 

P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流P1口管脚写入”1”后,电位被内部上拉为高可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。

另外P1口作为AD的模拟信号输入口,次功能需通过设置单片机的特殊功能寄存器来选择,如下所示四个寄存器:

 

sfr P1_ADC_EN=0X97; sfr ADC_CONTR=0XC5; sfr ADC_DATA=0XC6; sfr ADC_LOW2=0XC7; ⑤P2口 

P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流 当P2口被写”1”时,其管脚电位被内部上拉电阻拉高,且作为输入。

作为输入时P2口

管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。

P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。

在给出地址”1”时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。

 

⑥P3口 

P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。

当P3口写入”1”后,它们被内部上拉为高电平,并用作输入。

作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。

⑦RST:

复位输入端。

当振荡器复位时,要保持RST两个机器周期的高电平时间。

 

⑦PSEN 

外部程序存储器的选通信号。

在由外部程序存储器取址期间,每个机器周期PSEN两次有效。

但在访问外部数据存储器时,这两次有效的PSEN信号将不出现。

 

⑧EA/VPP 

当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。

在FLASH编程期间,此引脚也用于施加12V编程电源(VPP) 

⑨复位电路已经外部振荡电路的设计 

单片机的复位电路如上图所示。

该复位电路采用手动复位与上电复位相结合的方式。

当按下按键S1时,VCC通过R8电阻给复位输入端口一个高电平,实现复位功能,即手动复位。

上电复位就是VCC通过电阻R2和电容C2构成回路,该回路是一个对电容C1充电和放电的电路,所以复位端口得到一个周期性变化的电压值,并且有一定时间的电压值高于CPU复位电压,实现上电复位功能。

外部晶振电路为单片机系统提供时钟。

 

 

5.4:

 编程语言选择 

51的编程语言常用的有两种,一种是汇编语言,一种是C语言。

汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而C语言在大多数情况下其机器代码生成效率和汇编语言相当.

C 语言很好的结构性和模块化更容易阅读和维护,用C 编写程序比汇编更符合人们的思考习惯,开发者可以更专心的考虑算法而不是考虑一些细节问题这样就减少了开发和调试的时间,而且C语言还可以嵌入汇编来解决高时效性的代码编写问题。

 

5.5仿真

 

6:

课程设计总结

单片机课程设计心得体会做了两周的课程设计,有很多的心得体会范文范文,有关于单片机方面的,更多的是关于人与人之间关系方面的。

 课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。

因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。

关于这次课程设计,我们花费了比较多的心思,既是对课程理论内容的一次复习和巩固,还让我们丰富了更多与该专业相关的其他知识,比如软件应用等,在摸索中学习,在摸索中成长,在学习的过程中带着问题去学我发现效率很高,这是我做这次课程设计的又一收获,在真正设计之前我们做了相当丰富的准备,首先巩固一下课程理论,再一遍熟悉课程知识的构架,然后结合加以理论分析、总结,有了一个清晰的思路和一个完整的的软件流程图之后才着手设计。

在设计程序时,我们不能妄想一次就将整个程序设计好,反复修改、不断改进是程序设计的必经之路;养成注释程序的好习惯是非常必要的,一个程序的完美与否不仅仅是实现功能,而应该让人一看就能明白你的思路,这样也能为资料的保存和交流提供了方便;我觉得在设计课程过程中遇到问题是很正常,但我们应该将每次遇到的问题记录下来,并分析清楚,以免下次再碰到同样的问题的课程设计又出错了。

 

此次的设计,其实也是我们所学知识的一次综合运用,让我深深的认识到了学习单片机要有一定的基础,要有电子技术方面的数字电路和模拟电路等方面的理论基础,特别是数字电路;也要有编程语言的汇编语言或C语言。

要想成为单片机高手,我们首先要学好汇编语言,然后转入C语言学习,所以我们不能学到后面就忘了前面的知识,更应该将所学的知识紧紧的结合在一起,综合运用,所谓设计,就是要求创新,只有将知识综合运用起来才能真正的设计好。

 

这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在老师们的辛勤指导下,终于游逆而解。

同时,在老师们的身上我学得到很多实用的知识,在次我表示感谢!

同时,对给过我帮助的所有同学和各位指导老师再次表示忠心的感谢!

    

与其临渊羡鱼,不如退而结网。

这次数字电压表课程设计给我的最大的印象就是如果自己有了兴趣,就动手去做,困难在你的勇气和毅力下是抬不了头的。

从做这个电压表开始无论遇到什么困难,我都没有一丝的放弃的念头。

出于对知识的渴望,出于对新技术的好奇,出于对一切未知的求知。

我完成了这次数据库课程设计,不过这只是我学习路上的驿站,未来十年我会继续学习它,just do it!

语言并不重要毕竟它仅仅是工具,用好一个工具并不是一件值得为外人道的事情,主要是了解学习思想。

古语说的好:

学无止境啊。

这次课程设计不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。

更重要的是,在实验课上,我们学会了很多学习的方法。

而这是日后最实用的,真的是受益匪浅。

要面对社会的挑战,只有不断的学习、实践,再学习、再实践。

这对于我们的将来也有很大的帮助。

以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。

就像中国提倡的艰苦奋斗一样,我们都可以在实验结束之后变的更加成熟.

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。

  

实验过程中,也对团队精神的进行了考察,让我们在合作起来更加默契,在成功后一起体会喜悦的心情。

果然是团结就是力量,只有互相之间默契融洽的配合才能换来最终完美的结果。

虽然课程设计结束了,但是它带给我收获已经在我心里扎下了根。

我会将从这次课程设计中得到的,学到的,体会到的东西带到以后的学习中。

在这里再次感谢指导老师们,感谢他们带给我在这次课设中的收获。

 

7.附录

7.1:

硬件原理图

 

7.2:

仿真程序清单

#include

unsignedcharcodedispbitcode[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

unsignedcharcodedispcode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x00};

unsignedchardispbuf[8]={10,10,10,10,10,0,0,0};

unsignedchardispcount;

unsignedchargetdata;

unsignedinttemp;

longinti;

sbitSTART=P3^0;

sbitOE=P3^1;

sbitEOC=P3^2;

sbitCLK=P3^3;

voidmain(void)

{

ST=0;

OE=0;

ET0=1;

ET1=1;

EA=1;

TMOD=0x12;

TH0=216;

TL0=216;

TH1=(65536-5000)/256;

TL1=(65536-5000)%256;

TR1=1;

TR0=1;

ST=1;

ST=0;

while

(1)

{

if(EOC==1)

{

OE=1;

getdata=P0;

OE=0;

i=getdata*196;

dispbuf[5]=i/10000;

i=i%10000;

dispbuf[6]=i/1000;

i=i%

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

当前位置:首页 > 高等教育 > 法学

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

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