基于KeilC51和Proteus花样流水灯系统的设计 下载本文

龙源期刊网 http://www.qikan.com.cn

基于KeilC51和Proteus花样流水灯系统的设计

作者:谭艳春 朱又敏 刘目磊 来源:《软件工程》2018年第11期

摘 要:单片机技术日益成熟,已广泛应用于工业自动化、交通控制、智能仪表等众多领域。为了进一步研究并拓展单片机的应用,本文利用80C51单片机、KeilC51和Proteus软件对花样流水灯系统进行了完整的软硬件开发与设计。Proteus在线仿真验证了系统设计的稳定性和正确性。该系统的框架结构具有良好的可移植性,可根据实际需求生成不同的智能派生产品,具有较强的实际指导意义和应用价值。

关键词:KeilC51;Proteus;单片机;LED流水灯;系统设计 中图分类号:TP399 文献标识码:A 文章编号:2096-1472(2018)-11-14-03 1 引言(Introduction)

单片机无论从组成还是逻辑功能上都具有微机系统的特性,是一门实践性很强的软硬件结合的技术,且体积小巧,因此可以嵌入到各种应用系统中作为指挥决策中心,实现系统的智能化[1-3]。目前比较流行的单片机仿真软件和集成开发软件分别为Proteus和Keil。

Proteus不仅具有其他EDA工具软件的仿真功能,还能仿真单片机及外围器件,是目前世界上唯一将电路仿真软件、PCB设计软件和虚拟模型仿真软件三合一的设计平台,其处理器模型支持8051、HC11、PIC10/12/16/18/24/30/DsPIC33、AVR、ARM、8086和MSP430等。Keil是德国Keil Software公司出品的单片机集成开发环境,该软件支持51单片机的所有兼容机,它包括了C编译器、宏汇编、连接器、库管理及一个功能强大的仿真调试器在内的所有开发模块[4-7]。

2 硬件电路设计(Design of hardware circuit)

该系统的硬件电路主要包括时钟电路(采用内部时钟方式,晶振频率为12MHz)、复位电路、输入和输出电路四部分。其中输入电路是四个按钮开关K1—K4,并通过四输入与门74AS21将按键信息从外部中断引脚0(P3.2)读入系统,以触发中断,让CPU及时响应按键操作。由于80C51单片机P0口的内部电路结构问题,P0口作为I/O时必须接上拉电阻。输出部分由八个共阳型发光二极管及限流电阻(200Ω)组成。利用Proteus仿真软件生成的硬件电路如图1所示。

龙源期刊网 http://www.qikan.com.cn

按钮开关K1—K4对应的功能如下。

(1)K1:启动按钮,当K1按下时,流水灯自上而下,又自下而上轮流被点亮,即D1→D2→D3…D8→D7→D6→D5…D1,反复重复,直到有新的按鍵按下,闪烁间隔是50ms。简记为模式1方式。

(2)K2:当K2按下时,流水灯自上而下,又自下而上间隔被点亮,即

D1→D3→D5→D7→D8→D6→D4→D2,反复重复,直到有新的按键按下,闪烁间隔是50ms。简记为模式2方式。

(3)K3:当K3按下时,D1、D3、D5和D7同时被点亮,然后D2、D6、D4、D8同时被点亮,反复重复,直到有新的按键按下,间隔是1s。简记为模式3方式。

(4)K4:关闭按钮,当K4按下时,流水灯D1—D8同时被点亮,闪烁三次(间隔为100ms)后,全部熄灭。简记为模式4方式。

3 KeilC51环境下的编程(Programming in the KeilC51) 3.1 软件编程要点分析

(1)通过P0口的低四位引脚将按键信息读取进来,由电路连接方式可知,无按键按下时,四个引脚全部为高电平,若有按键按下,对应的引脚将由高电平变为低电平。可利用指令P0&0x0f获取P0口低四位引脚电平的变化信息。

(2)定义位变量on_off、style1、style2,根据这三个位电平的变化来控制程序的转移。这里需用到关键字bit,而不是sbit,虽然二者都可以进行位定义,区别在于sbit只能用来对特殊功能寄存器的位进行定义,如以下写法bit on_off;sbit botton1=P3^2是正确的,而sbit on_off;bit botton1=P3^2是错误的。

(3)P2口接的是共阳极LED发光二级管,因此只有对应引脚输出低电平时等才会被点亮,可将D1、D2、D3…D8被点亮时P2口对应的输出放到一个数组中,即led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}。

(4)该系统可通过查询法和中断法两种思路来实现。与查询法相比,中断法具有以下优点:首先,只有在按键按下时,CPU才执行相关的中断程序,而其他时间是不占用CPU的时间;其次,中断法可以更及时快速地响应按键操作。因此,为了提高CPU的工作效率,本系统采用中断扫描方式进行设计实现。

(5)关于中断方式的几点说明:(1)要使用外部中断,必须将中断允许打开,即对中断允许寄存器IE进行正确设置。IE的字节地址为A8H,所以即可以字节操作,又可以位操作,如要开启外部中断0,即可写IE=0x81H,也可写EX0=1,EA=1,二者的作用是等同的。

龙源期刊网 http://www.qikan.com.cn

(2)外部中断包括电平触发(ITx=0)(外部中断源接P3.2脚时,x=0;外部中断源接P3.3脚时,x=1)和边沿触发(ITx=1)两种触发方式。其中边沿触发的外部中断请求,在CPU响应中断后,自动由硬件对中断请求标志位EIx清0,即系统自动撤销中断请求;而电平触发的外部中断请求,硬件不能自动对中断请求标志位EIx清0,必须在撤销P3.2或P3.3引脚上的低电平后,再利用软件对中断请求标志位清0,比较繁琐。因此本系统采用边沿触发方式。 3.2 程序流程图

该系统的程序流程图如图2所示。 3.3 系统源代码

该花样流水灯系统的完整源代码如下:

#include;头文件reg51.h或reg52.h中包含了对8051型单片机特殊功能寄存器(SFR)名的集中说明。

Unsigned char led[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void delay(unsigned char time);//延时函数的声明 bit on_off=0, style1=0, style2=0;//定义位控制变量 button() interrupt 0{ //中断0函数 switch(P0&0x0f) {

case 0x0e: on_off=1, style1=1;break; //模式1方式的启动条件

case 0x0d: on_off=1, style1=0; style2=1;break; //模式2方式的启动条件 case 0x0b: on_off=1, style1=0;style2=0;break; //模式3方式的启动条件 case 0x07: on_off=0;break; //模式4方式的启动条件 }}

void main() { char i;

IT0=1;EX0=1;EA=1; //边沿触发、外部中断0允许、总中断允许