efwefwef 2021-03-12 21:50 采纳率: 0%
浏览 145

求助 为什么我的程序用串口要发送多次数据单片机才工作

#include<reg52.h>
typedef unsigned int u16;
sbit d1=P1^3;
sbit d2=P3^5;
sbit d3=P3^6;
sbit d4=P3^7;
sbit left_a =P0^0;				//正转
sbit left_b =P0^1;
sbit right_a =P0^2; 				//正转
sbit right_b = P0^3;
sbit beef=P0^7;
void delay(u16 s)
{
	u16 n,m;
	for(s=n;n>0;n--)
		for(m=200;m>0;m--);
}
u16 code smg[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
u16 code wei[10]={0xef,0xdf,0xbf,0x7f};
u16 i,num=0,hs,miao,fen;
u16 shuju;
void chuankou()
{
	EA=1;//打开中断总开关
	TMOD=0X21;//设置定时器工作方式2
	TH1=0XFD;//设置波特率 9600
	TL1=0XFD;
	TR1=1;//定时器1开始记数
	TH0=0XFC;
	TL0=0X18;
	ET0=1;
	TR0=1;
	SCON=0X50;//串口控制
	ES=1;//打开串口中断开关
}
void lsd()
{
	while(shuju=0x04)
	{
		d1=0;
		delay(100);
		d1=1;
		d2=0;
		delay(100);
		d2=1;
		d3=0;
		delay(100);
		d3=1;
		d4=0;
		delay(100);
	}
}
void smgxianshi()
{
	while(shuju=0x01)
	{
		if(num>=100)
		{
			num=0;
			hs++;
			if(hs>=10)
			{
				hs=0;
				miao++;
				if(miao>=60)
				{
					miao=0;
					fen++;
					if(fen>=10)
					{
						fen=0;
						miao=0;
						hs=0;
					}
				}
			}
		}
		for(i=0;i<4;i++)
		{
				if(i==4) i=0;
				 P0=0X00;
			switch(i)
			{
				case 0:P2=wei[i];P0=smg[fen];break;
				case 1:P2=wei[i];P0=smg[miao/10];break;
				case 2:P2=wei[i];P0=smg[miao%10];break;
				case 3:P2=wei[i];P0=smg[hs];break;
				
			}
			delay(10);
		}
	}
}
void main()
{
	chuankou();
		while(!RI)
		RI=0;
		shuju=SBUF;
		switch(shuju)
		{
			case 0x01:smgxianshi();break;
			case 0x02:TR0=~TR0;break;
			case 0x03:beef=~beef;break;
			case 0x04:lsd();break;
			case 0x05:
			{
				left_a = 1;						//正转
				left_b = 0;
				right_a = 1;					//正转
				right_b = 0;
				break;
			}
			case 0x06:
			{
			left_a = 0;						//反转
			left_b = 1;
			right_a = 0;					//反转
			right_b = 1;
			break;
			}
			case 0x07:
			{
			
			left_a = 0;						//不转
			left_b = 0;
			right_a = 1;					//正转
			right_b = 0;
			break;
			}
			case 0x08:
			{
			
			left_a = 1;						//正转
			left_b = 0;
			right_a = 0;					//不转
			right_b = 0;
			break;
			}
		}
	
}
void timer0() interrupt 1
{
	TH0=0XFC;
	TL0=0X18;
	num++;
}

void ck() interrupt 4
{
	RI=0;
	shuju=SBUF;
}
  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-10-25 19:49
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

悬赏问题

  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error