小弟最近被老师安排了个项目:用单片机串口通信控制串口屏的图片切换。
之前从来没接触过单片机,看了一周左右的书和视频,还是一头雾水。
问过老师,他给了我一个大体的框架,就是下面这样:
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()函数我不知道的是不是和串口中断写的指令是一样的;求大神指教。
#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;
}
一周热门 更多>