利用定时器1实现流水灯

利⽤定时器1实现流⽔灯
单⽚机实验1
圆珠笔尖
题⽬: 利⽤定时器1实现流⽔灯,先从左⾄右,再从右⾄左,1s从左到右,1s从右到左(不采⽤延时函数的⽅式实现)
思路硅胶模具制作方法
⾸先要求使⽤定时器1,且定时1s,那么先将基础的初始化函数完成,计算初值为1ms.在服务函数中定义⼀个计数变量count并且让count⾃增,当count=1000时即达到要求的1s.接着题⽬要求led灯
先从左⾄右,再从右⾄左移动,这⼀功能通过使⽤左移函数与右移函数来完成,具体看⽰例程序
#include <reg51.h>
#include <intrins.h>
水垢过滤器#define led P2
typedef unsigned char u8;
书法教学系统
typedef unsigned int  u16;
u16 i,j;     //定义两个控制左移和右移的控制变量
void Time1Init(); //声明定时器1的初始化函数
void main()
{
i  = 0;   //i⽤来控制左移赋初值0
j  = 8;   //j⽤来控制右移赋初值8
u形管
led = 0xfe;  //先点亮最左边的led灯
Time1Init();
while(1);
}
/
*定时器1的初始化,设置初值为1ms*/
void Time1Init()
{
TMOD |= 0x01;
TH1  = 0xfc;
TL1  = 0x18;
EA    = 1;
ET1  = 1;
TR1  = 1;
}
HD-PRIDE/*配置定时器1的服务函数*/
void Time1Start() interrupt 3
{
u16 count = 0;      //定义计数变量
TH1  = 0xfc;
TL1  = 0x18;
count++;
if(count == 1000) //达到1s
{
count = 0;
/*
判断灯是否从左边开始,如果是led灯开始右移
加上逻辑与的原因是防⽌漏掉灯在中间的情况
*/
if(j==8 && i<8)
{
led = _crol_(led,1);
led = _crol_(led,1);
/*
每移动⼀次就让控制左移的函数加1,直到第⼋个led灯如果到达第⼋个led灯,说明已经到达最右边,重新赋值  */
i=i+1;
if(i==8)
{
j = 0;
}
}
/*原理同上*/
if(i==8 && j<8)
{
led = _cror_(led,1);
j = j+1;
if(j==8)
{
i = 0;
}
}
}
}

本文发布于:2024-09-21 03:28:55,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/228934.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   控制   右移
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议