单片机定时器流水灯的修改

放屁蛤蟆 2023-12-29 22:11:12

我写这个代码只能实现流水灯,但是实现不了用按键修改流水灯的走向,想知道是代码哪里的问题,求看看

#include <REGX52.H>
#include <INTRINS.H>
static unsigned int s;
unsigned int number;
unsigned char keynum, led;

void Delay(unsigned int x)		//@11.0592MHz
{
	unsigned char i, j;

	while (x--) {
		i = 11;
		j = 190;
		do
		{
			while (--j);
		} while (--i);
	}
}
void Timer0Init(void)		//1毫秒@11.0592MHz
{
	TMOD &= 0xF0;		//设置定时器模式
	TMOD |= 0x01;		//设置定时器模式
	TL0 = 0x66;		//设置定时初值
	TH0 = 0xFC;		//设置定时初值
	TF0 = 0;		//清除TF0标志
	TR0 = 1;		//定时器0开始计时	
	EA = 1;
	ET0 = 1;
}
void key()
{
	if (P3_1 == 0) { Delay(20); while (P3_1 == 0); Delay(20); number = 1; }
}

void main()
{
	Timer0Init();
	P2 = 0xFE;
	while (1)
	{
		if (number == 1)
			led++;
		if (led >= 2)
			led = 0;
		if (s >= 1000)
		{
			s = 0;
			if (led == 0)
				P2 = _crol_(P2, 1);
			if (led == 1)
				P2 = _cror_(P2, 1);
		}
	}
}
void timer() interrupt 1
{
	TL0 = 0x66;
	TH0 = 0xFC;
	s++;
}

 

...全文
302 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
W_B_C 2024-01-02
  • 打赏
  • 举报
回复

这逻辑有问题

清晨曦月 2024-01-02
  • 打赏
  • 举报
回复

单片机……没看明白是啥的的。一般流程就写流水灯代码,然后加一个外部中断,在中断中修改方向变量。你这个看着貌似number 是控制方向?key()是外部中断调用?调用了没?number 也没见起什么作用,起码应该有两个值吧?number=1-number之类的

54,393

社区成员

发帖
与我相关
我的任务
社区描述
欢迎各位佬加入QRS社区,希望能与各位大佬们一起学习,共同进步。一个人的能力终究是有限的,但是一群人的话可以走的更远的。方便需要同步文章可以私聊。 VXH:chen_ze99 欢迎一起学习交流✔
c语言后端单片机 个人社区 江西省·上饶市
社区管理员
  • 謓泽
  • 游坦之
  • 小王曾是少年
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 需要三连互粉的可以在社区发帖子。
  2. 需要互相同步文章的可以私聊跟博主说。
  3. 需要互相学习探讨交流的可以添加博主的微信。
  4. 本社区希望大家共同维护、有什么活动的还请大佬们多多参与。

试试用AI创作助手写篇文章吧