基于单片CPU的8LED显示存储示波器设计_第1页
基于单片CPU的8LED显示存储示波器设计_第2页
基于单片CPU的8LED显示存储示波器设计_第3页
基于单片CPU的8LED显示存储示波器设计_第4页
基于单片CPU的8LED显示存储示波器设计_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计II报告(2013/2014学年 第2学期)题 目:基于单片CPU的8LED显示存储示波器设计专 业 通信工程 学 生 姓 名 倪鑫 班 级 学 号 B11010425 指 导 教 师 林建中 日 期 2014.06.01. 19 目录第一章 任务要求21.1实验目的21.2实验环境21.3课题要求4第二章 整体方案设计62.1整体方案6第三章 功能模块原理73.1 AT89C51单片机73.2动态显示模块93.3键盘模块10第四章 程序代码设计11第五章 仿真测试15第六章 设计小结18第一章 任务要求1.1实验目的在理论课程的基础上,重点培养动手能力,通过电路设计,理论计算,实际编

2、程,调试,测试,分析查找故障,解决在实际设计中的问题,使设计好的电路能正常工作。通过proteus软件的使用,能够较全面的了解单片机的原理和结构组成,单片机系统的扩展应用,较好的掌握单片机的汇编语言程序设计和硬件结构设计,通过实验了解单片机系统研制中的软件,硬件设计和系统程序调试等的全过程,掌握应用单片机系统设计解决实际问题的方式和方法。巩固单片机的课堂所学。1.2 实验环境1. 586微型计算机系统2. Proteus7.4sp3软件3. Keil C51软件1.3 实验步骤1. 点击“Project->New Project ”菜单,出现一个对话框,要求给将要建立的工程命名,我们选择

3、Atmel 公司的89C51 芯片如图1.1。点击ATMEL 前面的“+”号,展开该层,点击其中的89C51。图1.12. 点击“File->New File ”菜单,建立一个新文件,编写程序并保存,文件名后缀为“.c”。此时,在工程窗口的文件页中,出现了“Target1”,点击“+”号展开,可以看到下一层的“ Source Group1”,这时的工程还是一个空的工程,里面什么文件也没有,需要手动把刚才编写好的源程序加入,点击“Source Group1”使其反白显示,然后,点击鼠标右键,出现一个下拉菜单,选中其中的“Add file toGroup Source Group1” 如图1

4、.2所示,出现一个对话框,要求寻找源文件,注意,该对话框下面的“文件类型”默认为C source file(*.c),也就是以C 为扩展名的文件。点击“Flash->Configure Flash Tools” 菜单,设置对话框中的 OutPut 页面,如图1.3所示,这里面也有多个选择项,其中Creat Hex file用于生成可执行代码文件(可以用编程器写入单片机芯片的hex格式文件,文件的扩展名为.hex),默认情况下该项未被选中,根据实验要求,选中该项,并保存。 图1.2 图1.33. 在设置好工程后,即可进行编译、连接如图1.4。选择菜单 “Project->Build

5、target”,对当前工程进行连接,如果当前文件已修改,软件会先对该文件进行编译,然后再连接以产生目标代码;如果选择Rebuild All target files 将会对当前工程中的所有文件重新进行编译然后再连接,确保最终生产的目标代码是最新的,而Translate .项则仅对该文件进行编译,不进行连接。若编译连接通过则显示如图1.5。 图1.4 图1.51.4课题要求Ø 基本要求:1 用数码管或LCD正常显示数字“12345678”。2 通过按键可改变显示方式。3 设计显示屏的动态效果,用10个按键,每键对应一种滚动技术。Ø 发挥部分:1 设计所有动作的联合效果。2 设

6、计二个变速按键,可多级改变滚动速度。3 设计一台魔术电子种,采用自动变换,随机组合,数据每10秒变换一次。Ø 动态显示格式:1 静止2 整体闪烁3 单字闪烁4 整体向前、向后滚动5 单字移动6 两边向中间压缩7 中间向两边扩张8 上下压缩9 上下滚动10 组合动作(每一字符执行上述一个动作,并同时运动)第二章 整体方案设计2.1整体方案根据课题要求,使用7SEG-MPX8-CA,通过按键切换,来达到不同的动态显示效果。课题中的要求是用十种动态效果,对应的分别为“1”:禁止显示,“2”:整体闪烁显示,“3":单字闪烁显示,“4”:整体向前、向后滚动显示,“5”:单字移动显示,

7、“6”:两边向中间压缩显示,“7”:中间向两边扩张显示,“8”:上下压缩显示,“9”:文字上下滚动显示,“10”:组合动作显示。图2.1第三章 功能模块原理3.1 AT89C51单片机(图3.1)Ø P0口:P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。当P0口的管脚第一次写1时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FIASH编程时,P0 口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。 Ø P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TT

8、L门电流。P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收。Ø P2口: P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。并因此作为输入时,P2口的管脚被外部拉低,将输出电流。这是由于内部上拉的缘故。P2口当用于外部程序存储器Ø 或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时

9、,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号。 Ø P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口,如下表所示。P3口同时为闪烁编程和编程校验接收一些控制信号。Ø VCC:供电电压。Ø GND:接地。Ø RST:复位输入。Ø ALE/PROG:当访问外部存储器时,地址锁存允许的输出电

10、平用于锁存地址的地位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。Ø /PSEN:外部程序存储器的选通信号。Ø /EA/VPP:当/EA保持低电平时,此间外部程序存储器,不管是否有内部程序存储器。当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。Ø XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入。Ø XTAL2:来自反向振荡器的输出。图3.13.2动态显示模块图3.2引脚功能1数码管1片选信号2数码管2片选

11、信号3数码管3片选信号4数码管4片选信号5数码管5片选信号6数码管6片选信号7数码管7片选信号8数码管8片选信号A数码管段选信号AB数码管段选信号BC数码管段选信号CD数码管段选信号DE数码管段选信号EF数码管段选信号FG数码管段选信号GDP数码管段选信号小数点表1 7SEG-MPX8-CA管脚功能3.3键盘模块4位二进制输入方式,从左向右四个按键,位权分别为0124,接入89C51 I/O口P1。当输入二进制数为N时,显示N状态。图3.3第四章 程序代码设计#include <reg51.h>#include <intrins.h>#include <strin

12、g.h>#define uchar unsigned char#define ulong unsigned long#define uint unsigned int/ Delay period#define Timer 50char* number;uchar chooseNumber = 0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90;uchar flickOne = 0x02, 0x61, 0x43, 0x03, 0x43, 0x63, 0x02, 0x63;uchar flickTwo = 0x04, 0x4c

13、, 0x4c, 0x1c, 0x58, 0x58, 0x44, 0x5c;uchar flickThree = 0x00, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40;uchar chooseDigits = 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80;void delay(int i) i *= Timer;while(i-);uchar getInput() if(P1 != 0xff) delay(2);if(P1 != 0xff) return P1;return 0;/* Consta

14、nt number display function.*/void showDigits(char* number) uchar i;for(i = 1; i <= 8; i+) P3 = chooseDigitsi;if(numberi - 1 <= '9' && numberi - 1 >= '0') P2 = chooseNumbernumberi - 1 - '0'else if(numberi - 1 = ' ') P2 = 0xff;delay(2);/* Flicking numbe

15、r display function.*/void showFlick(char* number) uchar i;for(i = 1; i <= 8; i+) P3 = chooseDigitsi;P2 = numberi - 1;delay(2);void main() int count = 0;uchar key = 0, temp;while(1) temp = getInput();if(temp != 0) key = temp;switch(key) case 1:showDigits("12345678");break;case 2:(count /

16、 Timer) % 2 = 0 ? showDigits("12345678") : showDigits(" ");break;case 3:switch(count / Timer % 8) case 0: showDigits(" 2345678"); break;case 1: showDigits("1 345678"); break;case 2: showDigits("12 45678"); break;case 3: showDigits("123 5678"

17、;); break;case 4: showDigits("1234 678"); break;case 5: showDigits("12345 78"); break;case 6: showDigits("123456 8"); break;case 7: showDigits("1234567 "); break;break;case 4:switch(count / Timer % 8) case 0: showDigits("12345678"); break;case 1: sho

18、wDigits("23456781"); break;case 2: showDigits("34567812"); break;case 3: showDigits("45678123"); break;case 4: showDigits("56781234"); break;case 5: showDigits("67812345"); break;case 6: showDigits("78123456"); break;case 7: showDigits(&quo

19、t;81234567"); break;break; case 5:switch(count / Timer % 8) case 0: showDigits("2 "); break;case 1: showDigits(" 2 "); break;case 2: showDigits(" 2 "); break;case 3: showDigits(" 2 "); break;case 4: showDigits(" 2 "); break;case 5: showDigits(&q

20、uot; 2 "); break;case 6: showDigits(" 2 "); break;case 7: showDigits(" 2"); break;break;case 6:switch(count / Timer % 5) case 0: showDigits("12345678"); break;case 1: showDigits(" 123678 "); break;case 2: showDigits(" 1278 "); break;case 3: show

21、Digits(" 18 "); break;case 4: showDigits(" "); break;break;case 7:switch(count / Timer % 5) case 0: showDigits("12345678"); break;case 1: showDigits("234 567"); break;case 2: showDigits("34 56"); break;case 3: showDigits("4 5"); break;case

22、4: showDigits(" "); break;break;case 8:switch(count / Timer % 5) case 0: showDigits("12345678"); break;case 1: showDigits("12345678"); break;case 2: showFlick(flickThree); break;case 3: showDigits("12345678"); break;break;case 9:switch(count / Timer % 6) case

23、0: showDigits("12345678"); break;case 1: showDigits(" "); break;case 2: showFlick(flickOne); break;case 3: showDigits(" "); break;case 4: showFlick(flickTwo); break;case 5: showDigits(" "); break;break;case 10:switch(count / Timer % 8) case 0: showDigits("12345678"); break;case 1: showDigits(" "

温馨提示

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

评论

0/150

提交评论