单片机课程设计定时器控制4只LED滚动闪烁系统 - 图文 下载本文

开始 初始化 设置计数器 否 i=0;i++_ LED灯开始循环闪烁 计数器开始计数 否 计数完成 程序中断,i自加1,下一个LED灯开始闪烁

图4.2程序图

4.2.2程序清单:

主程序:

#include //定义8051寄存器的头文件 #define uchar unsigned char //定义无符号字符型(0——255) #define uint unsigned int //定义无符号整型(0——65535) //字符与整型分为有符号(signed)与无符号(unsigned)两类 //通常sbit数据类型是用于存取内部可位寻址的数据存储器 sbit B1=P2^0; //声明B1为P1.0端口 sbit G1=P2^1; sbit R1=P2^2; sbit Y1=P2^3;

//若要使用权sbit数据类型,则其声明方式有下列几种:

//1.先声明一个bdata存储器形式的变量,再声明属于该变量的sbit变量,例如: // char bdata scan; 声明scan为bdata存储器类型的字符 // sbit input_0=scan^0; 声明input_0为scan变量的bit 0 //2.先声明一个sfr变量,再声明属于该变量的sbit变量,例如: // sfr P0=0x80; 声明P0为0X80存储器位置,即P0

12

// sbit P0_0=P0^0; 声明P0_0为P0变量的bit0 //3.直接指定存储器位置,例如要声明P0的bit0,则 // sbit P0_0=0X80^0; 声明P0_0为0x80地址的bit0

uint i,j,k;

//------------------------------------------------------------------- //主程序

//------------------------------------------------------------------- void main() //主程序开始 {

i=j=k=0;

P2=0xff; //开始时全部关闭 TMOD=0X02; //定时/计数器工作方式寄存器 低4位

//T0定时器0工作于模式2 位数:8位计数范围:0-255 具有自动加载功能 TH0=256-200; //200us定时 TL0=256-200; IE=0X82; //中断使能寄存器IE,相当于EA=1;ET0=1; TR0=1; //定时器/计数器控制寄存器TCOD Timer0的启动开关 while(1); //无穷循环 }

//------------------------------------------------------------- //T0中断函数

//-------------------------------------------------------------- void LED_Flash_and_Scroll() interrupt 1

{ //每累计若干次定时器中断才执行一次闪烁 if(++k<35)return; //if条件语句 k=0;

switch(i) //多分支选择语句,switch语句开始 { case 0:B1=!B1; //蓝灯闪烁 break; //终止执行switch或循环语句 case 1:G1=!G1; //绿灯闪烁 break; case 2:R1=!R1; //红灯闪烁 break; case 3:Y1=!Y1; //黄灯闪烁 break; //退出switch语句 default:i=0; }

if(++j<150) //每次LED持续闪烁一段时间 return; //从函数返回语句 j=0;

P2=0xff; //关闭显示 i++; //切换到下一LED

13

//符号:++ ,功能: 加1 ,范例:i++ ,说明:执行运算后再将X变量的值加1 //符号:-- ,功能: 减1 ,范例:i-- ,说明:执行运算后再将X变量的值减1 }

4.2.3实验仿真结果图:

图4.2实验仿真结果图

14

结 论

定时器控制4只LED滚动闪烁对于单片机初学者有着非常重要的作用。本文完成了基于单片机的定时器控制4只LED滚动闪烁系统的设计与模拟。包括闪烁方案的设计,系统的硬件开发、软件编程与仿真调试等。在论文完成过程中,主要做的工作有:

(1)确定LED滚动闪烁系统具体的通行方案以及要求其他多功能的实现。

(2)以ATMEL公司的AT89S51单片机为核心进行系统硬件设计,输入量包括:输出LED灯亮灭状态及时间显示。

通过单片机课程设计,我不仅加深了对单片机理论的理解,将理论很好地应用到实际当中去,而且我还学会了如何去培养我们的创新精神,从而不断地战胜自己,超越自己。创新,是要我们学会将理论很好地联系实际,并不断地去开动自己的大脑,从为人类造福的意愿出发,做自己力所能及的,别人却没想到的事。使之不断地战胜别人,超越前人。同时,更重要的是,我在这一设计过程中,学会了坚持不懈,不轻易言弃。设计过程,也好比是我们人类成长的历程,常有一些不如意,也许这就是在对我们提出了挑战,勇敢过,也战胜了,胜利的钟声也就一定会为我们而敲响。

15

参考文献

【1】谢维成. 单片微型计算机原理及应用.清华大学出版社,2009.

【2】余锡存 曹国华.单片机原理及接口技术.西安电子科技大学出版社,2011. 【3】雷丽文 等.微机原理与接口技术.电子工业出版社,1997.

【4】吴黎明, 王桂棠, 洪添胜,等. 单片机原理及应用技术.科学出版社,2005. 【5】韩克, 柳秀山, 等. 电子技能与EDA 技术.暨南大学出版社, 2004. 【6】张毅坤.单片微型计算机原理及应用.西安电子科技大学出版社,1998

16