1602屏配合红外遥控(实现光标移动)与对1602新的认识
//显示字符
void zf_1602(unsigned char x,unsigned char y,unsigned dat) //参数一是显示的列,参数二是显示的行,参数三是显示的数据
{
if(y==0)
{
x_1602(0,(0x80+x)); //第一行
}
else
{
x_1602(0,(0xc0+x)); //第二行
}
x_1602(1,dat); //写入数据
}
void zfc_1602(unsigned char x,unsigned char y,unsigned char *dat)//参数一是显示的列,参数二是显示的行,参数三是显示的数据(注:数据用 结尾)
{
if(y==0)
{
x_1602(0,(0x80+x)); //第一行
}
else
{
x_1602(0,(0xc0+x)); //第二行
}
while(*dat) //&:取地址 *:取值
{
x_1602(1,*dat);
dat ++;
}
}
void xhc(unsigned char *p) //红外按键匹配函数
{
switch(p[2]) //匹配按键
{
case 0x16:x_1602(1,0);break; //按键0
case 0x0c:x_1602(1,1);break; //按键1
case 0x18:x_1602(1,2);break; //按键2
case 0x5e:x_1602(1,3);break; //按键3
case 0x08:x_1602(1,4);break; //按键4
case 0x1c:x_1602(1,5);break; //按键5
case 0x5a:x_1602(1,6);break; //按键6
case 0x42:x_1602(1,7);break; //按键7
case 0x52:x_1602(1,8);break; //按键8
case 0x4a:x_1602(1,9);break; //按键9*/
case 0x44: //光标左移
{
m_1602(1); //读取AC值(此函数也是读忙值函数)
if(ac != 0x00 && ac != 0x40) //限制光标左移的边界
x_1602(0,0x10); //光标左移
break;
}
case 0x40: //光标右移
{
m_1602(1); //读取AC值(此函数也是读忙值函数)
if(ac != 0x0f && ac != 0x4f)//限制光标右移的边界
x_1602(0,0x16); //光标右移
break;
}
case 0x43: //换行
{
unsigned char io1; //记录光标所在的列
bit io2; //记录光标所在的行
m_1602(1); //读取ac值
io2 = ac & 0x40; //取出行
io1 = ac & 0x0f; //取出列
if(io2) //io2=1是第一行,io2=0是第二行
{
x_1602(0,(0x80+io1));
}
else
x_1602(0,(0xC0+io1));
break;
}
case 0x09:x_1602(0,0x1);break; //清屏
}
JM=0;
}
void csh_1602() //初始化1602
{
x_1602(0,0x38); //显示模式设置
Delayms(5);
x_1602(0,0x38);
Delayms(5);
x_1602(0,0x38);
Delayms(5);
x_1602(0,0x38);
x_1602(0,0x0f); //显示光标
x_1602(0,0x01); //显示清屏
x_1602(0,0x06); //显示光标移动设置
}
void main()
{
unsigned char la[14]="www.51hei.com";
unsigned char jmsj[4];
csh_1602();
qp_1602();
csh_wbzd_0();
csh_dsq_0();
while(1)
{
zfc_1602(1,0,la); //写入字符串
while(1)
{
if(JS) //脉冲接收结束后调用解码函数解码
{hwjm(jmsj);}
if(JM) //解码完成后调用按键匹配函数
{xhc(jmsj);}
}
}}
本文引用地址:https://www.eepw.com.cn/article/201612/324234.htm
本文引用地址:https://www.eepw.com.cn/article/201612/324234.htm
小结
1、1602的AC值其实就是前一次的地址设置
2、读出AC地址与写入AC有本质的区别
以上的意思是 如下:
读出的AC地址是:4BH(75)
但是如果我写入的地址直接写入 :4BH(75)这个那就是错的。
这里就涉及到一个写入命令了 。。如下图:
所以要设置4B这个AC地址就要+上80H这个值。。
3、光标所在的位置就是AC地址的位置
4、这个程序有个小的BUG。
BUG就是:在第15个字符位置输入一个字符后光标会消失
造成的原因是AC值大于了 2FH 与 67H 这个两个地址。
关键词:
1602屏红外遥控光标移
评论