51单片机的流水灯控制班级:100712姓名:全建冲学号:10071047设计要求用51单片机设计一个流水灯的控制方案,要求采用定时器定时,利用中断法控制流水灯的亮灭,画出电路图和程序流程图,写出程序代码以及代码注释。电路原理图原理图分析:本原理图采用STC89S52单片机控制8个LED灯,其中8个LED灯的负极接单片机的P1端口,正极通过1KΩ排阻连接到电源上。原理图中还给出了晶振与复位端,以保证控制器的稳定工作。开始程序流程图 定时器初始化化 50毫秒定时溢出? NYi++ i=10? N YP1端口赋值a循环移位程序代码及注解非中断定时器控制#include<>#include<>//包含了_crol_函数的头文件#defineucharunsignedchar#defineuintunsignedintuinti=0;uchara=0xfe;voidmain(){ TMOD=0x01;//设置工作方式为定时器0,16位手动重装初值 TH0=(65536-46080)/256;//50毫秒定时赋初值 TL0=(65536-46080)%256; TR0=1;//启动定时器0 while(1){ If(TF==1)//读溢出标志位{ TH0=(65536-46080)/256;//重新赋初值 TL0=(65536-46080)%256;i++; if(i==10)//500毫秒定时{ i=0; P1=a;//P1端口赋值 a=_crol_(a,1);//循环左移}TF=0;//清除定时器溢出标志}}}程序分析:本程序采用非中断定时器法控制流水灯,核心语句在于读取标志位TF位,TF为定时器溢出标志位,溢出时硬件自动置一,所以循环读取标志位以判断定时器是否溢出,而每次溢出需要手动清零,否则定时器无法再次溢出,利用标志i读取10次即可达到500毫秒的定时。,所以计时一个数的时间为12/=,故定时50毫秒的计数为50000/=46080。中断定时器控制#include<>#include<>//包含了_crol_函数的头文件#defineuartunsignedchar#defineuintunsignedintuinti=0;uchara=0xfe;voidTimer0_init();voidmain(){ Timer0_init();//定时器中断初始化 while(1);}Timer0_init(){ TM
51单片机流水灯 来自淘豆网m.daumloan.com转载请标明出处.