PROTEUS 跑马灯 单片机课程设计
单片机闪烁灯跑马灯控制课程设计

单片机闪烁灯跑马灯控制课程设计单片机闪烁灯跑马灯控制课程设计报告一、引言本课程设计旨在通过学习和实践单片机(MCU)编程,实现闪烁灯和跑马灯的控制。
我们将使用嵌入式C语言编程,通过了解单片机的内部结构、电路设计和编程流程,深入理解单片机的工作原理和应用。
二、系统硬件设计本课程设计选用51单片机作为主控芯片,外接8个LED灯和1个按键。
硬件电路设计如下:1.单片机:采用AT89C51,该芯片具有32K字节的Flash存储器,256字节的RAM,以及两个16位定时器/计数器。
2.LED灯:采用普通LED灯珠,与单片机引脚相连,通过编程控制LED灯的亮灭状态。
3.按键:采用机械按键,与单片机的外部中断0(EX0)相连,用于触发闪烁灯和跑马灯的切换。
三、系统软件设计1.闪烁灯模式:在此模式下,8个LED灯将按照一定的频率交替闪烁。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void blink_LED(void) {int i;while(1) {for(i = 0; i < 8; i++) {P1_0 = ~P1_0; // 翻转LED状态delay(500); // 延时,控制闪烁频率}}}2.跑马灯模式:在此模式下,8个LED灯将按照一定的顺序依次点亮。
我们可以通过计时器和GPIO口控制LED灯的亮灭状态。
void marquee_LED(void) {int i;int led_state[8] = {0, 1, 0, 1, 0, 1, 0, 1}; // LED状态数组,初始为交替亮灭while(1) {for(i = 0; i < 8; i++) {P1_0 = led_state[i]; // 设置LED状态delay(50); // 延时,控制跑马灯速度}}}四、按键处理程序我们通过外部中断0(EX0)接收按键信号,当按键按下时,将切换闪烁灯和跑马灯模式。
按键处理程序如下:void EX0_ISR(void) interrupt 0 { // EX0中断服务程序if (key_flag) { // 如果按键已经被按下过if (key_value == 0) { // 如果按键状态为低电平marquee_LED(); // 切换到跑马灯模式key_flag = 0; // 标记按键状态已经改变} else { // 如果按键状态为高电平blink_LED(); // 切换到闪烁灯模式key_flag = 0; // 标记按键状态已经改变}key_value = ~key_value; // 翻转按键状态值} else { // 如果按键还没有被按下过key_value = ~key_value; // 翻转按键状态值if (key_value == 0) { // 如果按键状态为低电平blink_LED(); // 切换到闪烁灯模式key_flag = 1; // 标记按键状态已经改变} else { // 如果按键状态为高电平marquee_LED(); // 切换到跑马灯模式key_flag = 1; // 标记按键状态已经改变}}}。
微机原理(基于PROTEUS的跑马灯系统设计及仿真)

学号:课程设计题目基于PROTEUS的跑马灯系统设计及仿真学院自动化学院专业自动化班级姓名指导教师2012 年 1 月12 日任务书目录引言 (1)1总体方案论证 (2)1.1功能分析 (2)1.2系统连接图设计 (2)1.2.1锁存控制电路 (5)1.2.2可编程并行通信接口芯片8255A (6)2程序流程图设计及其说明 (9)3关键程序段落说明 (11)3.1数据段定义 (11)3.2程序初始化 (11)3.3芯片初始化 (12)3.4初始LED亮灭状态 (12)3.5检测按键开关子程序 (12)3.6延时程序片段 (14)3.7灯光变换控制 (15)4程序调试说明 (16)5结果记录及分析 (17)心得体会 (19)参考文献 (20)引言微型计算机简称微机,由于具备人脑某些功能,所有又叫做微机。
是由大规模集成电路组成的、体积较小的电子计算机。
它是以微处理器为基础,配以存储器及输入输出接口电路和相应的辅助电路构成的裸机。
把微型计算机集成在一个芯片上即构成单片微型计算机。
学习微机原理与接口技术,主要容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言、设计以及微型计算机各个组成部分,而其中很大一块就是汇编语言的学习。
汇编语言是面向机器的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
用汇编语言编写的程序由于目标程序占用存少,运行速度快,它有着高级语言不可替代的用途。
因此,学习汇编语言是很必要的,通过学习汇编语言可以体会它的作用。
通过本次课程设计让我们进一步深入汇编语言的学习,掌握简单的接口设计技术,将理论知识联系实际,进一步学习微机原理与接口技术的相关知识,为以后深入学习打下良好的基础。
1总体方案论证1.1功能分析此次课程设计的要求为,设计微型计算机最小系统,实现跑马灯的模拟显示功能。
具体要求为:(1)、输入设备三个启动按钮、一个停止按钮,输出设备为八个跑马灯;(2)、三个启动按钮对应三种跑马灯显示效果,按下任意一个启动按钮,跑马灯显示对应的效果,按下停止按钮则跑马灯全部熄灭。
微机原理(基于PROTEUS的跑马灯系统设计及仿真)资料

课程设计题目基于PROTEUS的跑马灯系统设计及仿真学院自动化学院专业自动化班级姓名指导教师2012 年 1 月12 日任务书目录引言 (1)1总体方案论证 (2)1.1功能分析 (2)1.2系统连接图设计 (2)1.2.1锁存控制电路 (5)1.2.2可编程并行通信接口芯片8255A (6)2程序流程图设计及其说明 (9)3关键程序段落说明 (11)3.1数据段定义 (11)3.2程序初始化 (11)3.3芯片初始化 (12)3.4初始LED亮灭状态 (12)3.5检测按键开关子程序 (12)3.6延时程序片段 (14)3.7灯光变换控制 (15)4程序调试说明 (16)5结果记录及分析 (17)心得体会 (19)参考文献.................................................................. 错误!未定义书签。
引言微型计算机简称微机,由于具备人脑某些功能,所有又叫做微机。
是由大规模集成电路组成的、体积较小的电子计算机。
它是以微处理器为基础,配以内存储器及输入输出接口电路和相应的辅助电路构成的裸机。
把微型计算机集成在一个芯片上即构成单片微型计算机。
学习微机原理与接口技术,主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言、设计以及微型计算机各个组成部分,而其中很大一块就是汇编语言的学习。
汇编语言是面向机器的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
用汇编语言编写的程序由于目标程序占用内存少,运行速度快,它有着高级语言不可替代的用途。
因此,学习汇编语言是很必要的,通过学习汇编语言可以体会它的作用。
通过本次课程设计让我们进一步深入汇编语言的学习,掌握简单的接口设计技术,将理论知识联系实际,进一步学习微机原理与接口技术的相关知识,为以后深入学习打下良好的基础。
1总体方案论证1.1功能分析此次课程设计的要求为,设计微型计算机最小系统,实现跑马灯的模拟显示功能。
单片机花样走马灯课程设计

花样走马灯一设计目的1.掌握单片机系统设计思路和基本步骤。
2.熟悉Keil C51高级语言集成开发环境。
3.熟练使用基于proteus的单片机系统仿真软件。
4.学会在ISIS 7 Professional下绘制电路原理图。
5.学会 Proteus VSM与uvision3 IDE的联调过程。
二设计要求实现单片机8051设计控制P1口的8个LED灯成花样走马灯。
连续实现以下四种效果:1.单灯左移2.单灯右移3.单灯逐个点亮接着逐个熄灭4.两边向中间逐个点亮接着中间向两边逐个熄灭三总体设计单片机应用系统的研制步骤一般分为:总体设计、硬件电路的构思设计、软件的编制和仿真调试四个阶段。
1.硬件电路设计根据设计要求所需的元器件为AT89C51单片机和LED灯。
该硬件部分由朱艳兵完成,故不再做详细介绍。
2.系统软件分析设计原理:规定灯亮时控制该灯的位设置为低电平,灯灭时该位设置为高电平,为了清楚的看到灯亮时的效果,要设置相应的延时函数,通过数组的引用和函数的调用来实现花样走马灯的设计。
(1)要使走马灯实现单灯左移、单灯右移、单灯逐个点亮接着逐个熄灭、两边向中间逐个点亮接着中间向两边逐个熄灭这四种效果。
(2)可根据上述的规定来设置控制8个LED灯的P1口各个引脚的电平来控制LED灯亮的效果。
①单灯左移:可将P1.0~P1.7各个引脚逐个设置为低电平,即该引脚控制的灯亮时该位就为低电平,即可设置一个数组名为table的数组来存放灯亮时的P1口各个引脚的电平。
②单灯右移:即P1.7先亮,按照P1.7~P1.0的顺序向右移,即该灯亮的时候该位就设置为低电平,反之为高电平,各引脚的电平在数组aa中存放,引用数组aa就可实现单灯右移。
③单灯逐个点亮接着逐个熄灭:可按照P1.0~P1.7的顺序点亮再按照P1.7~P1.0的顺序熄灭,实现原理同单灯左移和单灯右移,各个引脚的电平在数组bb,cc中存放。
④两边向中间逐个点亮接着中间向两边逐个熄灭:即先将P1.0和P1.7同时设置为低电平,全部点亮后再将P1.3和P1.4设置为高电平,依次直至全部熄灭,各个引脚的电平在数组dd中存放。
基于 Proteus 软件的单片机实验室建设方案跑马灯 万年历课程设计

目录摘要 (Ⅰ)ABSTRACT ..................................................................................................... I I 课程说明 . (1)1.1 国内单片机实验室建设发展综述 (1)1.2 单片机仿真软件综述 (2)1.3 课程设计任务任务 (4)方案设计 (4)2.1 硬件配置方案 (4)2.2 软件配置方案 (5)2.3 Proteus 实验室完成实验内容 (8)基于PROTUES的的仿真实验 (10)3.1、基础性实验------跑马灯设计 (10)3.1.1跑马灯的硬件设计 (10)3.1.2跑马灯的软件设计 (14)3. 2.1万年历设计 (19)3.2.2 调试与仿真 (20)参考文摘 (22)总结 (24)附录 (25)跑马灯的程序清单 (25)万年历的程序清单 (25)摘要微机系统是大二学的课程,通过这门课学会了汇编语言。
微机系统的核心是硬件仿真,硬件方正的重点是单片机。
单片机的种类繁多,在我们学校由于实验室的限制,没有条件在包括所有种类的单片机仿真设备。
本文提出基于Proteus 软件的单片机实验室建设方案,它能很好的解决上述问题。
数字单片机实验室是采用Proteus 和Keil 仿真软件为核心来构建的。
该数字实验室能完成中断、定时、单片机扩展、串行口通信和A/D 转换等教学实验。
并给出相应的小实例说明Proteus的基本使用方法、仿真实验的一般流程,并在此基础上实现复杂的Proteus仿真实验项目,如跑马灯仿真实验和万年历仿真实验。
该方案以软件为核心,通过配置有限的硬件设备,很好地解决了传统单片机实验室资金和设备维护问题,我们通过仿真实验,可以熟悉单片机系统的开发方法,即使不真正接触单片机或者相应的芯片,也能够熟悉各种芯片,并且对进一步培养自己的综合分析能力、排除故障能力和开发、创新能力具有重要的意义。
单片机跑马灯课程设计

第一章概论随着人们生活环境的不断改善和美化,在许多场合可以看到彩色霓虹灯。
LED 彩灯由于其丰富的灯光色彩,低廉的造价以及控制简单等特点而得到了广泛的应用,用彩灯来装饰已经成为一种时尚。
但目前市场上各式样的 LED 彩灯控制器大多数用全硬件电路实现,电路结构复杂、功能单一。
这种彩灯控制器结构往往有芯片过多、电路复杂、功率损耗大等缺点。
此外从功能效果上看,亮灯模式少而且样式单调,缺乏用户可操作性,影响亮灯效果。
因此有必要对现有的彩灯控制器进行改进。
本产品不仅具有电路简单,造价便宜,功耗低等优点,还有多种亮灯花样。
而且可以通过修改源程序中延迟程序的参数来改变亮灯速度和频率,还可以通过修改表中的数据来改变亮灯的方式,这便大大提高了产品的性能与灵活性,使产品不会局限于单一的功能而限制产品的适用范围。
课程设计是学完一门课后应用本课知识及以前的知识积累而进行的综合性、开放性的训练,是培养学生工程意识和创新能力的重要环节。
进一步巩固和加深“单片机”课程的基本知识,了解单片机设计知识在实际中的应用。
综合运用“单片机”课程和先修课程的理论及生产实际知识去分析和解决电路设计问题,进行单片机电路设计的训练。
学习单片机设计电路的一般方法,了解和掌握单片机电路的设计过程和进行方式,培养正确的设计思想和分析问题、解决问题的能力,特别是总体电路设计能力。
通过计算和绘图,学会运用标准、规范和查阅有关技术资料等,培养单片机电路设计的基本技能。
第二章设计方案2.1、设计目的学生在教师指导下运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。
通过课程设计(论文),提高学生综合运用所学知识来解决实际问题、使用文献资料、及进行科学实验或技术设计的初步能力,为毕业设计(论文)打基础。
2.2、设计要求以MCS51单片机为核心,辅以外围接口电路,设计一个花样LED闪烁彩灯,使彩灯按事先编好的流程不断闪烁,并有不同种闪烁花样。
LED灯管可以使用共阳极,单片机芯片可采用AT89C52。
微机原理(基于PROTEUS的跑马灯系统设计及仿真)

dl3:decbx
jnz dl3
deccx
jnz dl4
jmp ledflash
exit:
movnum,0
jmp here
ledflash endp
csegends
endstart
4程序调试说明
(1)、内存空间分配,汇编语言的重要特点之一是能够直接利用机器指令或者伪指令为数据或者代码程序分配内存空间,86系列(如8086微处理器)的存储器结构是分段的,有代码段,数据段,堆栈段或附加段,在程序设计时要充分考虑分段结构,要执行的程序段应设在当前段(活动段)中;分配内存空间:直接在proteus里面将8086CPU的internal memory size设置成一个足够用的空间大小,如0x1000,默认的空间大小是0x00000,如不改则仿真不成功。
[SPICE]error---too many iterations without coFra bibliotekvergence
在仿真过程中,出现以上两行的错误,太多的迭代没有收敛性,和某个汇编语言在编码过程中的地址不正确,经过排查程序去除无用代码,proteus不再报错。
(3)、8255A隐藏引脚问题,需要设置芯片Hidden Pins里的GND改为VSS,VCC改为VDD。
如图所示我们利用启动按钮作为输入信号,通过8255A端口扩展芯片,调节输出端口的电平变化,来控制共阳极的LED灯的亮与灭,实现跑马灯不同的花样变化。
图跑马灯电路图
1.2.1锁存控制电路
锁存控制电路电路如图所示,在微控制器单元(MCU)中,寄存器是十分重要的资源。寄存器的主要作用是快速寄存算术逻辑运算单元(ALU)运算过程中的数据,其锁存功能利用74LS273来实现,74LS273是一种带清除功能的8D触发器,1D~8D为数据输入端,1Q~8Q为数据输出端,正脉冲触发,低电平清除,常用作数据锁存器,地址锁存器。
微机原理(基于PROTEUS的跑马灯系统设计及仿真)

目录引言 (1)1总体方案论证 (2)1.1功能分析 (2)1.2系统连接图设计 (2)1.2.1锁存控制电路 (5)1.2.2可编程并行通信接口芯片8255A (6)2程序流程图设计及其说明 (9)3关键程序段落说明 (11)3.1数据段定义 (11)3.2程序初始化 (11)3.3芯片初始化 (12)3.4初始LED亮灭状态 (12)3.5检测按键开关子程序 (12)3.6延时程序片段 (14)3.7灯光变换控制 (15)4程序调试说明 (16)5结果记录及分析 (17)心得体会 (19)参考文献 (20)引言微型计算机简称微机,由于具备人脑某些功能,所有又叫做微机。
是由大规模集成电路组成的、体积较小的电子计算机。
它是以微处理器为基础,配以内存储器及输入输出接口电路和相应的辅助电路构成的裸机。
把微型计算机集成在一个芯片上即构成单片微型计算机。
学习微机原理与接口技术,主要内容包括微型计算机体系结构、8086微处理器和指令系统、汇编语言、设计以及微型计算机各个组成部分,而其中很大一块就是汇编语言的学习。
汇编语言是面向机器的程序设计语言,也是利用计算机所有硬件特性并能直接控制硬件的语言。
用汇编语言编写的程序由于目标程序占用内存少,运行速度快,它有着高级语言不可替代的用途。
因此,学习汇编语言是很必要的,通过学习汇编语言可以体会它的作用。
通过本次课程设计让我们进一步深入汇编语言的学习,掌握简单的接口设计技术,将理论知识联系实际,进一步学习微机原理与接口技术的相关知识,为以后深入学习打下良好的基础。
1总体方案论证1.1功能分析此次课程设计的要求为,设计微型计算机最小系统,实现跑马灯的模拟显示功能。
具体要求为:(1)、输入设备三个启动按钮、一个停止按钮,输出设备为八个跑马灯;(2)、三个启动按钮对应三种跑马灯显示效果,按下任意一个启动按钮,跑马灯显示对应的效果,按下停止按钮则跑马灯全部熄灭。
由上分析可知,我们的硬件的电路需要另行搭建,电路中需包含四个按钮和八个跑马灯以及相关芯片,既有输入设备又有输出设备,经过分析可以使用芯片8255A来实现输入与输出,再加上锁存地址芯片74LS273、译码芯片74LS154以及相关门电路即可构成本设计的硬件电路基础。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微型计算机技术课程设计报告专业:通信工程班级:xxxxxxxxx姓名:XXX学号:xxxxxxx指导教师:XX时间:xxx通信与电子信息工程学院8255扩展一、课设目的、内容;1.目的:为了进一步巩固学习的理论知识,增强学生对所学知识的实际应用能力和运用所学的知识解决实际问题的能力,开始为期两周的课程设计。
通过设计使学生在巩固所学知识的基础之上具有初步的单片机系统设计与应用能力。
(1).通过本设计,使学生综合运用《微型计算机技术》、《C语言程序设计》以及《数字电路》、《模拟电路》等课程的内容,为以后从事电子产品设计、软件编程、系统控制等工作奠定一定的基础。
(2).学会使用KEIL C和PROTEUS等软件,用C语言或汇编语言编写一个较完整的实用程序,并仿真运行,保证设计的正确性。
(3).了解单片机接口应用开发的全过程:分析需求、设计原理图、选用元器件、布线、编程、调试、撰写报告等。
2.内容:8155或8255扩展用8155或8255扩展IO实现16个LED的跑马灯,提供多种跑马灯运行模式二、问题分析、方案的提出、设计思路及原因;本次课程设计的题目是8255的扩展,利用AT89C52驱动扩展8255数据输出口来实现16个LED跑马灯的显示。
但是在80C52系列单片机中,有四个8位I/O 端口,但真正能够提供给用户使用的只有P1口,因为P0口和P2口通常需要用来传送外部存储器的地址和数据,P3口也需要使用它的第二功能。
因此,单片机提供给用户的I/O接口线并不多,对于复杂的一些的应用系统都应该进行I/O 口的扩展。
8255具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB 口和PC口.而8255又有多种运行模式,而这些操作模式完全由控制寄存器的控制字决定。
利用8255的控制字模式来定义8255输出口的个数,驱动所需的LED 灯的个数,实现课题目的。
在仿真实验中,两个按键分别控制跑马灯的顺序显示、跳跃显示两种运行方式,顺序显示分别是一个、两个、四个、八个LED灯依次亮。
跳跃显示分别是一个、两个、四个LED灯跳跃显示三、电路设计及功能说明,硬件原理框图及电路图(包括接口芯片简介);本次设计采用AT89C52芯片驱动可编程接口芯片8255的扩展来实现LED 灯的多种显示方式。
让AT89C52芯片的P0口与8255芯片的三态双向数据总线D0~D7连接,实现数据传送。
当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
8255的地址选择线A1、A0分别与AT89C52的P2.7和P2.6连接,通过定义不同的地址来定义8255芯片PA 口和PB 口的工作方式。
读写命令线分别与单片机的读写命令线相连,片选线直接接地,复位线RESET 接单片机的P2.5。
同时PA 口与8个LED 灯顺序连接。
PB 口与8个LED 灯逆序连接,通过按键控制可以选择不同的运行模式,实现多种跑马灯的运行模式。
硬件原理框图P1口AT89C52P0口D0~D7 PA 口PB口“顺”“逆”模式选择开关…………8255电路图接口芯片简介(1)AT89C52AT89C52是51系列单片机的一个型号,它是ATMEL公司生产的。
AT89C52是一个低电压,高性能CMOS 8位单片机,片内含8k bytes的可反复擦写的Flash只读程序存储器和256 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大的AT89C52单片机可为您提供许多较复杂系统控制应用场合。
AT89C52有40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,3个16位可编程定时计数器,2个全双工串行通信口,2个读写口线,AT89C52可以按照常规方法进行编程,但不可以在线编程(S系列的才支持在线编程)。
其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
AT89C52有PDIP、PQFP/TQFP及PLCC等三种封装形式,以适应不同产品的需求。
主要功能特性:· 兼容MCS51指令系统· 8k可反复擦写(>1000次)Flash ROM· 32个双向I/O口· 256x8bit内部RAM· 3个16位可编程定时/计数器中断· 时钟频率0-24MHz· 2个串行中断· 可编程UART串行通道· 2个外部中断源· 共6个中断源· 2个读写中断口线· 3级加密位· 低功耗空闲和掉电模式· 软件设置睡眠和唤醒功能(2)8255芯片8255特性(1)一个并行输入/输出的LSI芯片,多功能的I/O器件,可作为CPU总线与外围的接口.(2)具有24个可编程设置的I/O口,即使3组8位的I/O口为PA口,PB口和PC口.它们又可分为两组12位的I/O口,A组包括A口及C口(高4位,PC4~PC7),B组包括B口及C口(低4位,PC0~PC3).A组可设置为基本的I/O口,闪控(STROBE)的I/O闪控式,双向I/O3种模式;B组只能设置为基本I/O或闪控式I/O两种模式,而这些操作模式完全由控制寄存器的控制字决定.8255引脚功能RESET:复位输入线,当该输入端处于高电平时,所有内部寄存器(包括控制寄存器)均被清除,所有I/O口均被置成输入方式。
CS:芯片选择信号线,当这个输入引脚为低电平时,即/CS=0时,表示芯片被选中,允许8255与CPU进行通讯;/CS=1时,8255无法与CPU做数据传输RD:读信号线,当这个输入引脚为低电平时,即/RD=0且/CS=0时,允许8255通过数据总线向CPU发送数据或状态信息,即CPU从8255读取信息或数据。
WR:写入信号,当这个输入引脚为低电平时,即/WR=0且/CS=0时,允许CPU 将数据或控制字写入8255。
D0~D7:三态双向数据总线,8255与CPU数据传送的通道,当CPU 执行输入输出指令时,通过它实现8位数据的读/写操作,控制字和状态信息也通过数据总线传送。
PA0~PA7:端口A输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入锁存器。
PB0~PB7:端口B输入输出线,一个8位的I/O锁存器,一个8位的输入输出缓冲器。
PC0~PC7:端口C输入输出线,一个8位的数据输出锁存器/缓冲器,一个8位的数据输入缓冲器。
端口C可以通过工作方式设定而分成2个4位的端口,每个4位的端口包含一个4位的锁存器,分别与端口A和端口B配合使用,可作为控制信号输出或状态信号输入端口。
'A0,A1:地址选择线,用来选择8255的PA口,PB口,PC口和控制寄存器.当A0=0,A1=0时,PA口被选择;当A0=0,A1=1时,PB口被选择;当A0=1,A1=0时,PC口被选择;当A0=1.A1=1时,控制寄存器被选择.四、软件部分的程序流程图,算法和使用的编程技巧;1.程序流程图开始设置初值启动定时计数器开中断有键按下?根据键值运行不同模式跑马灯LED灯灭结束处理2.算法编译两个函数,分别是void display( )函数和void delay( )函数,前者是LED显示函数,后者是延时函数。
程序的开始,先定义各个参数、各口的地址以及各个位。
主函数中,定义y1、y2分别为PA口PB口的相应地址,控制各个LED灯的亮灭;m为显示函数void display( )中for循环的个数,控制LED灯亮灭循环;k1、k2分别为PA口PB口地址转移的个数,控制PA口PB口地址转移的方式;t 为延迟的参数,顺、跳两模式定义不同的k值和m值。
然后定义CPU的各个状态,使其正常工作。
在顺序显示中,先进入while(1)循环,循环中两判断条件if(P1==0xfd),令k1=1,实现顺显示,和if(P1==0xfb),令k2=2实现跳显示。
根据条件进入相应模式,各有一个LED灯亮、两个LED灯亮、四个LED灯亮、八个LED灯亮,和一个LED灯、两个LED灯、四个LED灯间隔亮显示函数void display( )中,两个for循环分别控制PA口PB口LED灯的循环模式,其中n为for循环的次数。
先定义PA口PB口的首地址outdata1、outdata2进入循环,函数_cror_和_crol_控制他们地址不同的转移方式,k为其中的转移的个数。
t为延迟函数的参数,控制亮灭延迟的时间。
延迟函数void delay( )中,t为延迟的参数,控制程序中所需的延迟时间。
程序中各个参数之间都一一对应,根据要求相互呼应。
通过控制这些参数的量值来实现硬件仿真中多种跑马灯的运行模式。
3.编程技巧设计中,我将与PA相连的LED灯顺序排列,与PB相连的逆序排列,要注意两组初始值并不相同,明确参数间的关系,多个参数组合使用,实现跑马灯的多种运行方式。
五、源程序清单,对关键的语句(段)要给出简洁的注释;#include<reg52.h>#include<intrins.h>#include<absacc.h>#define uchar unsigned char#define uint unsigned int#define PA XBYTE[0x3fff]#define PB XBYTE[0x7fff]#define CTL XBYTE[0xffff]sbit reset=P2^5;void delay(uint t)//延时函数{for(;t>0;t--){TH0=(65536-1000)/256;TL0=(65536-1000)%256;TR0=1;while(TF0==0) ;TF0=0;}TR0=0;}void display(uint k,uint n,uint t,uchar y1,uchar y2)//循环显示函数{uint i;for(i=0;i<n;i++){PA=y1;delay(t);y1=_crol_(y1,k);//左循环}PA=0xff;for(i=0;i<n;i++){PB=y2;delay(t);y2=_cror_(y2,k);//右循环}PB=0xff;}void main(){uchar y1,y2;uint m,k1=1,k2=1,t;EA=1;ET0=1;TMOD=0x01;reset=1;_nop_();reset=0;CTL=0x80; //写8255控制字,设置PA,PB,为输出口PA=0xff;PB=0xff;while(1){if(P1!=0xfd) k1=1;if(P1==0xfd)//依次显示{t=300;switch(k1){case 1:m=8;y1=0xfe;y2=0x7f;display(k1,m,t,y1,y2);break; //依次亮一盏LEDcase 2:m=4;y1=0xfc;y2=0x3f;display(k1,m,t,y1,y2);break; //依次亮两盏LEDcase 4:m=2;y1=0xf0;y2=0x0f;display(k1,m,t,y1,y2);break; //依次亮四盏LEDcase 8:m=1;y1=0x00;y2=0x00;display(k1,m,t,y1,y2);break; //依次亮八盏LEDdefault:break;}if(k1==8) k1=1;else k1=k1*2;}if(P1!=0xfb) k2=2;if(P1==0xfb) //跳跃显示{t=500;switch(k2){case 2:m=4;y1=0xfe;y2=0x7f;display(k2,m,t,y1,y2);break; //隔一盏,亮一盏case 4:m=2;y1=0xfc;y2=0x3f;display(k2,m,t,y1,y2);break; //隔两盏,亮两盏case 8:m=1;y1=0xf0;y2=0x0f;display(k2,m,t,y1,y2);break; //隔四盏,亮四盏default:break;}if(k2==8) k2=2;else k2=k2*2;}}}六、仿真过程综述;仿真开始。