《51单片机课程设计实验报告.doc》由会员分享,可在线阅读,更多相关《51单片机课程设计实验报告.doc(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、51单片机应用设计与仿真-基于Keil C 与 Proteus院校成都理工大学工程技术学院专业 测控技术与仪器 学号 200920303235 姓名 李刚 指导老师 赵老师 成绩 目录 第一章51单片机结构和原理 .单片机的结构 第二章相关编程软件与仿真软件的介绍 2.1 从标准C转向Keil C 2.2 Keil C上机的基本方法 2.3 Proteus简介 第三章基于单片机的PID温度控制系统 3.1 PID温控器简介 3.2 8051存储系统扩展和PID温控器的存储系统设计3.2.1 PID温控器存储系统设计 53.3 人机接口和PID温控器的输入/输出设计及仿真3.3.1 八段LED显
2、示器63.3.2 LED显示器的显示方式83.3.3 PID温控器LED显示及仿真9.键盘监测基本原理123.3.5 PID温控器的键盘设计及其Proteus仿真 133.3.6 PID温控器的炉温采样接口及仿真 16第四章总结与展望 22参考文献 22 第一章51单片机结构和原理单片微型计算机简称单片机,也称为微控制器(Micro Controller Unit),英文缩写为MCU.单片机的结构及功能均是按照工业控制要求而设计的,它把微型计算机的宫格功能部件(中央处理器CPU、随机存取存储器RAM、只读存储器ROM、输入输出I/O接口、定时器/计数器以及串行通信接口等)集成在一块芯片上,构成
3、一个完整的微型计算机,故又称为单片微型计算机。除工业领域外,单片机还广泛应用于各种民用电子、电器之中。MCS-51是由美国INTEL公司20世纪80年代生产的一系列8位单片机的总称,此系列单片机包括很多型号,如:8031、8051、8751、8032、8052等,其中8051是最早最典型的产品。该系列其他单片机都是在8051的基础上进行功能的增、减改变而来的,所以人们习惯用8051来称呼系列单片机,而其中的在世纪年代末年代初是我国最流行的单片机之一。公司后来将MCS-51的核心技术授权给了其他公司,现在生产8051内核单片机的公司,主要有ATMEL、WINBOND、NXP、等。随着技术的发展,
4、各种高性能的位、位不断出现,但以、以及等系列为典型代表的位,由于成本低、开发工具完善、易学易用等特点,仍具有强大的生命力和极高的实使用价值。.单片机的结构1.1.1 基本结构单片机的基本结构为: 8位CPU,片内振荡器。 4KB程序存储器ROM(4096个8位淹没ROM)。 128字节的数据存储器RAM(128个8位淹没RAM)。 21个特殊功能寄存器。 32条I/O口线。 外部数据存储器寻址空间为64KB。外部程序存储器寻址空间为64KB。 2个16位的可编程定时/计数器。 中断结构:具有5个中断源,2个优先级。 一个全双工串行通信口。 有位寻址功能,适于布尔处理的位处理机制。1.2.1 8
5、051单片机引脚图图表 1 at89c51单片机第二章相关编程与仿真软件的介绍常用的单片机语言有很多,如:汇编、C语言、BASIC、C+等,对51单片机而言,使用最为广泛的还是汇编语言和C语言。有经验的程序员用汇编语言可以写出高效率的程序,但每种语言都有自己个子的特点。2.1 从标准C转向Keil CC51是专门为51系列单片机设计的,根据51单片机自身的特点进行了若干扩展,与ANSIC在语法和库函数方面存在稍许差别,但绝大部分是兼容的。但在学习中,使用最多的还是Keil C8.08 u Vision3。2.2 Keil C上机的基本方法2.2.1 uVision 3中编程的基本步骤 在uVi
6、sion 3集成开发环境中创建一个新项目(Project),并为该项目选定合适的单片机型号。 利用uVision 3的文件编译器编写C语言(或者汇编语言)源程序文件,并将文件添加到项目中去。 通过uVision 3的各种选项,配置Cx51编译器、Ax51宏编译器、BL51/Lx51连接定位器以Debug 调试器的功能。 利用uVision 3的构造功能对项目中的源程序文件进行编译链接,生成绝对目标代码和可选的HEX格式的可执行文件,如果出现编译链接错误则返回上一步,修改源程序中的错误后重新构造整个项目。 将没有错误的绝对目标代码装入uVision 3调试器进行仿真调试,调试成功后用编程器将可执
7、行文件写入到单片机应用系统的程序存储器或者单片机内部的Flash ROM中。2.2.2 uVision 上机注意事项C51源程序汗汉字注释内容时,删除、插入汉字会出现乱码。解决方法为:选择Edit|Configuration 菜单项,弹出界面,将C源程序文本字体选择为DotumChe , 此字体可避免出现汉字乱码现象。原版的Keil C编译器会忽略编码为0xFD的字符,当编写中文显示程序时会出现问题,应安装针对这一问题的专用补丁,许多Keil C安装包都含有该补丁程序,安装时间可根据帮助文件安装该补丁。2.3 Proteus简介Proteus是英国Labcenter公司开发的嵌入式系统仿真软件
8、,组合了高级原理图设计工具ISIS、混合模式SPICE仿真、PCB设计以及自动布线而形成了一个完整的电子设计系统。它运行于Windows操作系统上,可以仿真、分析各种模拟和数字电路,并且对机的硬件配置要求不高。2.3.1 Proteus与Keil C 的联合仿真 目前,单片机仿真软件很多,Proteus ISIS 与其他单片机仿真软件不同的是,它不仅能仿真单片机CPU的工作情况,也能够仿真单片机外围电路或没有单片机参与的其他电路的工作情况。一次在仿真和程序调试时,关心的不再是某些语句执行时单片机寄存器和存储器内容的改变,而是从工程师的角度直接看程序运行和电路工作的过程和结果。同事,当原理图调试
9、成功后,利用Proteus ARES软件,很容易获得PCB图,为今后的制造提供了方便。Keil是美国Keil Software公司开发的,是目前世界上最好的51单片机的汇编和C语言的开发工具。它支持汇编、C语言以及混合编程,同时具备功能强大的软件仿真,在软件模拟仿真方式下不需要任何单片机硬件即可完成用户程序仿真调试;虽然Keil也提供了硬件仿真(用Monitor51协议,需要硬件支持)功能,但我们在利用它的硬件仿真功能的时候,它会受到一定的限制。如果我们将Proteus ISIS与Keil整合起来使用,充分利用各自的仿真功能,单片机软硬件的调试将变的十分有效。打开LED.dsn,删除LED设计
10、页中的ULA2003A驱动部分,在LED设计页新建一个子电路LED_DRIVER,为该子电路见撒谎那个输入/输出端子。移动鼠标指针带子电路上。按Ctrl+C计入子电路所在的设计页,原ULA2003驱动部分加上相应的端子。由于LED的驱动部分有多中方案,将来采用别的方案时不需要做任何的修改。用BUTTON元件绘出键盘的部分,并为行扫描线和列扫描线上的端子命名,此处不采用Proteus中现成的键盘模型是为了是读者更透彻的理解键盘的设计和按键识别的原理,但在商业产品的开发中可购买现成的键盘模块。第三章基于单片机的PID温度控制系统3.1 PID温控器简介PID温控器原理图电炉内的热电阻温度传感器测出
11、的温度信号经运算放大器放大和模/数转换后,由8051读出电阻炉炉温,控制程序根据当前炉温和目标温度的偏差,按照一定的控制方法控制开关K的开与断,提供适当的加热功率,以使炉温尽快趋近目标温度。PID温控器还通过串口与PC通信,以实现远程监控。LED和键盘用于人机接口,交流电过零检测部分可使8051只在正弦交流电零点附近控制开关K的通与断,以避免对交流电斩波而造成干扰。 本设计是接口技术、应用系统设计、Proteus仿真的结合,介绍存储系统、人机接口、数据采集、串口通信等知识及其在PID温控器设计中的应用于仿真,从个子系统开始,设计并逐步完善,直至整个应用系统的实现。3.2 8051存储系统扩展和
12、PID温控器的存储系统设计3.2.1 PID温控器存储系统设计PID温控器的存储系统设计中使用了一片3-8译码器74LS138来产生各芯片所需的片选信号。6264信号来自于74LS138的 输出。另外,要是 为低 电平选中6264,则C、B、A的输出应为011,由此可以计算出6264的二进制地址范围为0110 0000 0000 0000 0111 1111 1111 1111,写成十六进制为0x60000x7fff,2764的地址范围为0x00000x1fff。下图为温控系统的仿真原理图温控系统扩展图3.3 人机接口和PID温控器的输入/输出设计及仿真键盘和显示器是最常用的人机交互设备,在单
13、片机系统中显示器常用笔段式LED或者多段式液晶LCD做显示设备,如微波炉、洗衣机、DVD等家用电器采用此类显示方式。输出内容较复杂的系统也有才有字符型点阵式LED、字符型LCD等,这里只介绍八段LED显示器,可用于数字和部分字符显示。3.3.1 八段LED显示器下图为笔段式八段LED数码管原理图。LED显示器有共阴极和共阳极之分,其中的每段为一个发光二极管,常用的有红绿两种。共阴极LED的com公共端应接低电平,割断引脚接高电平则该段点亮,接低电平则该段熄灭。共阳极LED与其相反。不考虑com端,可知共阳极显示字符0时的各段二进制编码为1100 0000 ,写成十六进制为0xC0。以下是以C语
14、言形式给出的共阳极LED能显示的部分数字和字符编码,课直接用在C51程序中。unsigned char code LED_CODES=0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86, 0x8e,0xff,0x0c,0x89,0x7f,0xbf;段位置以编号共阳极LED共阴极LED3.3.2 LED显示器的显示方式实际使用LED时,一般将几个八段显示器排列成一组使用,其中的一个LED显示器被称为一位。多位LED显示器的显示方式分为静态方式和动态扫描方式。静态方式中各LED的段引脚和com端都
15、独立接线,这种方式的好处是程序相对简单,显示无闪烁;缺点是功耗大。采用动态扫描时,各LED的段引脚链接在一起,而com段独立,程序是通过控制各LED的com端的电平来决定点亮某一位LED。其优点是功耗小,缺点为编程相对复杂,当CPU负担较重时可能达不到理想的刷新速度,导致效果变差。LED静态显示仿真图测试程序代码:/*LED静态显示程序段*/#include#includeunsigned char code LED_CODES= 0xc0,0xf9,0xa4,0xb0,0x99, 0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86, 0x8e
16、,0xff,0x0c,0x89,0x7f,0xbf;void main()XBYTE0X0100=LED_CODES9;XBYTE0X0200=LED_CODES6;XBYTE0X0300=LED_CODES3; while(1); 仿真结果如下图:3.3.3 PID温控器LED显示及仿真下图为PID温控器LED显示部分的Proteus仿真原理图。8255A是一个教复杂的并行接口芯片,在PID温控器主要用作I/O口扩展,用于LED的显示。在编程时应注意,由于8255A的复位时间较长,字应用程序访问8255A之前,应有足够的延时保证8255A已正确复位。PID温控器LED显示仿真原理图图中有6位
17、动态扫描共阴极LED,它们的段引脚AG、DP是并联在一起的;引脚16位是各位LED的com端,相互独立。8255A端口C经74LS244的相同输出S0S7作为LED的段驱动信号,当某位LED各段全部点亮时,com端电流会达到120150mA,所以,选用驱动能力较强的ULN2003A作为驱动器件。8255端口的经反相后的输出,作为的位选信号,排阻作为的下拉电阻。测试程序:显示头文件/*display.h*/#define base 0x0000#define port_a (base)#define port_b (base+1)#define port_c (base+2)#define po
18、rt_control (base+3)#define leds 6#define ca 0 #define cc 1 void turn_on(char led,char chnumber,char mode);void ledsoff();void onebyone(char datas);extern void init8255();unsigned char code select;unsigned char code led_codes;/*显示程序*/*display.c*/#includeabsacc.h#includereg51.h#include display.hunsign
19、ed char code select=0x01,0x02,0x04,0x08,0x10,0x20; unsigned char code led_codes=0xc0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90, 0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF,0x0C,0x89,0x7F,0xBF; void init8255()unsigned char i,j;for(j=0;j10;j+)for(i=0;i1;t1=t1;t1=t1|0X0F;P1=t1;t1=P1;/*求行号*/t2=0X08; t1=t1;for
20、(i=4;i!=0;i-)t3=t2&t1;if(t3!=0) *row=i-1;break;else t2=t21;exit:return result;实验仿真结果:该键盘显示的是第一行第一个键按下时的情景. /、/转换以及PID温控器的温度采集子系统在计算机实时测量和智能化仪表等应用系统中,经常会遇到从时间到数值均连续变化的模拟量,如温度、压力、位移、速度等,与此相对应的电信号称为模拟信号。因单片机只能处理数字量,因此这些模拟电信号必须转化为离散的数字信号,才能被送给单片机进行相应的处理。将模拟信号转化为数字量的器件称为A/D转换器,简称A/D。A/D转化器的主要技术指标1、 分辨率 分
21、辨路是指输出数字量变化的一个相邻数码所需要输入模拟电压的变化量。习惯上用输出的二进制位数或BCD码位数表示。例如,分辨率为12位的A/D转换器,表示该转化器的输出数据可以用212个二进制数进行量化。分辨率用呗分数表示如下:1/212 *100%=1/4096 *100%=0.0244%故一个满刻度为10V的12位A/D转换器能够分辨输入电压变化的最小值为2.4V。2、 量化误差 量化误差是指由A/D转换器的优先分辨率多引起的误差。若不考虑其他误差的影响,一个分辨率有限的A/D转换器的阶梯状转移特性曲线与具有无限分辨率的A/D转换器转移特性曲线(直线)之间的最大误差,称为误差量化。提高分辨率能够
22、减少量化误差。3、 转换精度 转换精度是指A/D转换器的时间量化值与理想A/D转换器的差值。转换精度可以分为绝对精度和相对精度,是由非线性、零点刻度、满量程刻度以及温漂等因素所引起的误差。4、 转换速率 转换速率就是指能够重复进行数据转换的速度,即每秒转换的次数。而完成一次的A/D转换所需要的时间,则是转换速率的倒数。A/DC0809芯片介绍 ADC0809为8位逐次逼近式A/D转换器,CMOS工艺。ADC0809的综合功能如下:分辨率为8位;最大不可调误差为1LSB;单一的+5V供电,模拟输入范围为0-5V;具有锁存控制的8路模拟开关;可锁存三态输出,输出与TTL兼容;功耗15mW;不必进行
23、零点和精度调整;转换速率取决于芯片的时钟频率。时钟频率范围:10-1280kHz,当时钟为500kHz时,转换速率为128us。3.3.6 PID温控器的炉温采样接口及仿真PID温控器A/D转换原理下图是PID温控器的仿真原理图;PID温控器仿真转换仿真局部图图中的P1为访问外数据存储器空间地址时的译码输出,当写时,可使锁存数据总线上0、1、2的输入通道号,CPU读0x2xxx时,可使A/D转换结果读到CPU中。测试程序:/* ADC0808的程序段 */#include #include #include #include unsigned char getData2(unsigned ch
24、ar ADC_Chip,unsigned char channel)unsigned char flag=0;unsigned char value=-1;unsigned xdata ale;switch (ADC_Chip)case ADC_0808:P3=P3|0x08;XBYTEADC0808_START_PORT=channel;P3=P3&0xdf;P3=P3|0x20;P3=P3&0xdf;flag=P3;while(1)ale=1;flag=flag&0x08;if(flag=0) break;flag=P3;value=XBYTEADC0808_DATA_PORT;retur
25、n value;break;主程序#include #include #include #include void main() unsigned char value; unsigned int k; char strIndexs6=20,20,20,20,1,12; Init8255(); while(1) value= getData1(ADC_0808,1); for(k=100;k!=0;k-) dispStr(strIndexs,value,1); LedsOff(); 仿真结果:3.3.7 测温放大电路与ADC0808的接口及仿真在前面已经完成了测温放大电路的分析和设计,现在考虑
26、将其整合到前面的PID温控器的仿真设计中,最终的仿真原理图如下:整体原理图:测温仿真效果图测试程序:测温放大程序#include#include#include#define ADC_0808 1#define ADC0808_DATA_PORT 0x2000#define ADC0808_QUERY_PORT 0x4000#define ADC0808_START_PORT 0x2000void turn_on_withdot(char led,char chnumber,char mode);unsigned char getdata2(unsigned char ADC_Chip,uns
27、igned char channel)unsigned char flag=0;unsigned char value=-1;unsigned xdata ale;switch (ADC_Chip)case ADC_0808:P3=P3|0x08;XBYTEADC0808_START_PORT=channel;P3=P3&0xdf;P3=P3|0x20;P3=P3&0xdf;flag=P3;while(1)ale=1;flag=flag&0x08;if(flag=0) break;flag=P3;value=XBYTEADC0808_DATA_PORT;return value;break;v
28、oid main()unsigned char value;unsigned long t;unsigned char i,m,n;Init8255();while(1)value=getdata2(ADC_0808,0);t=(200*(unsigned long)value*100)/255+5)/10;LedsOff();for(i=200;i!=0;i-)for(m=100;m!=0;m-);for(i=0;i+)m=t%10;if(i=1)LedsOff();for(n=5000;n!=0;n-);turn_on_withdot(i,m,CC);for(n=500;n!=0;n-);
29、 elseLedsOff();for(n=5000;n!=0;n-);turn_on(i,m,CC);for(n=500;n!=0;n-);t=t/10;if(t=0)break;void turn_on_witndot(char led,char chnumber,char mode)if(mode=CA)XBYTEPORT_C=LED_CODESchnumber|0x7f;elseXBYTEPORT_C=LED_CODESchnumber|0x7f;XBYTEPORT_B=selectled;仿真效果图:第四章总结与展望本次51单片机的课程设计离单片机课程结束已有两年多了,可以说基本上都忘
30、记了。因此,这次课程设计对我们即将找工作的毕业生来说,是非常有意义的。在这个过程中,我们重新学习并深化了对单片机技术的理解,更加熟练地掌握了各种仿真软件。比如说:Keil C51、Proteus等等。学会了怎样去仿真和调试,懂得了发现错误后怎么去解决。另外,单片机技术在现实生活中应用的越来越多,几乎所有的电子产品都必不可少。如:智能洗衣机、电冰箱、各种类型的传感器以及控制系统等。因此,学好这门课对我们来说是十分有用的。然而,由于本人的水平有限,并未完全掌握,在今后的学习过程中仍然需要花费大量的时间去深化。特别是,在实际使用时更重要的才是硬件连接,需要自己动手制作各种电路板,开发各种不同的系统。所以,今后的时间里将会更多的注重这一方面。参考文献【】李朝青单片机原理及接口技术北京:北京航空航天大学出版社【】胡汉才单片机原理及其接口技术北京:清华大学出版社【】丁明亮、唐前辉单片机应用设计与仿真北京:北京航空航天大学出版社【】王燕单片机原理与应用北京:北京航空航天大学出版社【】张靖武单片机系统的设计与仿真北京:电子工业大学出版社【】夏路易电路原理图与电路板设计教程北京:北京希望电子出版社【7】Atmel公司.Atmel8051 Microsoftroller Hardware Manul.2005【8】周立功.增强型80C51单片机速成与实践.北京: 北京航空航天大学出版社23