单片机控制串口屏通信出现了问题,小白求教
之前从来没接触过单片机,看了一周左右的书和视频,还是一头雾水。
问过老师,他给了我一个大体的框架,就是下面这样:
PS:通过按键控制图片输出
void main
{
初始化串口和定时器
for(;;);//相当于while(1);
}
//串口1中断
void Serial_1() interrupt 4
{
if(TI)
{
TI=0;
里面进行发数据操作
}
}
//定时器0中断
void Time_0() interrupt 1
{
TR0 = 0;
TH0 = 0xbe;
TL0 = 0xe0;
TR0 = 1;
Key_Scan();//按键扫描
}
注:Key_Scan()函数里面要包含对屏幕指令的发送操作
看了屏的开发指南,知道控制图片功能的寄存器(地址),准备把相应的指令写入数组,放在串口1中断发送操作那个位置;Key_Scan()函数我不知道的是不是和串口中断写的指令是一样的;求大神指教。
就知道串口屏用着挺方便
怎么说?前辈
你还是先把串口调通再说把
串口屏不懂,串口是需要设置和调试,和波特率有关系,书上应该有串口的c语言资料的,可以仿照着使用。
不了解 跟着小编一起学习了解一下 不知小编问题解决了吗
还是没有,前辈,不过我会继续加油的
分享大家一个学习单片机与嵌入式的地方,可以关注一下微信公众号【玩转单片机与嵌入式】,每天都会分享三篇有价值的文章,通过碎片化的学习时间,提高自己的水平。
你先调通串口能正常收发数据后再试着发图片
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uint i,k;
uchar code q[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};
uchar code table1[]={0xa5,0x5a,0x04,0x80,0x03,0x00};
uchar code table2[]={0xa5,0x5a,0x04,0x80,0x03,0x00};
uchar code table3[]={0xa5,0x5a,0x03,0x80,0x6a,0x5a};
uchar code table4[]={0xa5,0x5a,0x03,0x80,0x6b,0x5a};
sbit Key1=P1^0;
sbit Key2=P1^1;
sbit Key3=P1^2;
sbit Key4=P1^3;
void Key_Scan();
void dealyms();
void init();
void main()
{
init();
k=0;
while(1)
{
Key_Scan();
}
}
void Key_Scan()
{
if(Key1==0)
{
k=(k+1)%5;
dealyms();
if(Key1==0)
{
for(i=0;i<6;i++)
{
SBUF=table1[i];
while(!TI);
TI=0;
}
SBUF=q[k];
while(!TI);
TI=0;
}
while(!Key1);
}
if(Key2==0)
{
k=((k-1)+5)%5;
dealyms();
if(Key2==0)
{
for(i=0;i<6;i++)
{
SBUF=table2[i];
while(!TI);
TI=0;
}
SBUF=q[k];
while(!TI);
TI=0;
}
while(!Key2);
}
if(Key3==0)
{
dealyms();
if(Key3==0)
{
for(i=0;i<6;i++)
{
SBUF=table3[i];
while(!TI);
TI=0;
}
}
while(!Key3);
}
if(Key4==0)
{
dealyms();
if(Key4==0)
{
for(i=0;i<6;i++)
{
SBUF=table4[i];
while(!TI);
TI=0;
}
}
while(!Key4);
}
}
void dealyms()
{
unsigned char a,b;
for(b=249;b>0;b--)
for(a=17;a>0;a--);
}
void init()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
REN=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
}