51单片机流水灯

51单片机流水灯

ID:38977376

大小:124.77 KB

页数:7页

时间:2019-06-22

51单片机流水灯_第1页
51单片机流水灯_第2页
51单片机流水灯_第3页
51单片机流水灯_第4页
51单片机流水灯_第5页
资源描述:

《51单片机流水灯》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、51单片机的流水灯控制班级:100712姓名:全建冲学号:100710476一、设计要求用51单片机设计一个流水灯的控制方案,要求采用定时器定时,利用中断法控制流水灯的亮灭,画出电路图和程序流程图,写出程序代码以及代码注释。二、电路原理图原理图分析:本原理图采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片机的P1端口,正极通过1KΩ排阻连接到电源上。原理图中还给出了晶振与复位端,以保证控制器的稳定工作。6开始一、程序流程图定时器初始化化50毫秒定时溢出?NYi++i=10?NYP1端口赋值a循环移位6一、程序代码及注解1.非

2、中断定时器控制#include#include//包含了_crol_函数的头文件#defineucharunsignedchar#defineuintunsignedintuinti=0;uchara=0xfe;voidmain(){TMOD=0x01;//设置工作方式为定时器0,16位手动重装初值TH0=(65536-46080)/256;//50毫秒定时赋初值TL0=(65536-46080)%256;TR0=1;//启动定时器0while(1){If(TF==1)//读溢出标志位{TH0=(65536-

3、46080)/256;//重新赋初值TL0=(65536-46080)%256;6i++;if(i==10)//500毫秒定时{i=0;P1=a;//P1端口赋值a=_crol_(a,1);//循环左移}TF=0;//清除定时器溢出标志}}}程序分析:本程序采用非中断定时器法控制流水灯,核心语句在于读取标志位TF位,TF为定时器溢出标志位,溢出时硬件自动置一,所以循环读取标志位以判断定时器是否溢出,而每次溢出需要手动清零,否则定时器无法再次溢出,利用标志i读取10次即可达到500毫秒的定时。另外需要注意的是单片机晶振为11.0592MHz,所以计时

4、一个数的时间为12/11.0592=1.085us,故定时50毫秒的计数为50000/1.085=46080。1.中断定时器控制#include6#include//包含了_crol_函数的头文件#defineuartunsignedchar#defineuintunsignedintuinti=0;uchara=0xfe;voidTimer0_init();voidmain(){Timer0_init();//定时器中断初始化while(1);}Timer0_init(){TMOD=0x01;//设置定时器

5、方式为定时器0,16位手动重装初值TH0=(65536-46080)/256;//50毫秒定时赋初值TL0=(65536-46080)%256;EA=1;//开总中断ET0=1;//开定时器0中断TR0=1;//开启定时器0}voidtimer0()interrupt1//定时器0中断服务程序6{TH0=(65536-46080)/256;//重装初值TL0=(65536-46080)%256;i++;if(i==10)//500毫秒定时{P1=a;//P1端口赋值a=_crol_(a,1);//循环左移}}程序分析:本程序采用定时器中断法控制流水

6、灯,核心语句在于中断的产生上,主程序中定时器初始化一次之后用一个while循环让程序停留在此处等待中断的产生,此句话是为了防止程序跑飞设计。而定时器计数溢出后将产生中断,定时器0的中断服务程序标志是interrupt1,定时溢出后将自动跳转到此中断服务程序中执行,通过读取10次来达到500毫秒的定时,注意初值的重置与标志位的清零即可。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。