Mortimer 发表于 2014-11-13 15:19:02

用RC522做门禁,有个函数看不懂,求解释

每次从卡中读出的数据都要经过下面这个函数的转换才送去显示,我不知道这个函数式什么意思,希望大虾们能够解释!
void LCD_Data(unsigned char LCDbyte )
{
       unsigned char count;
       count=(LCDbyte&0xf0)>>4;
       if (count>0x9) lcd_wdat(count%9+0x40);
       else lcd_wdat(count+0x30);
       count=LCDbyte&0x0f;
       if (count>9) lcd_wdat(count%9+0x40);
       else lcd_wdat(count+0x30);
}


非常感谢啦

磊磊映画 发表于 2014-11-13 15:35:05

这个函数是用于把字符串转换成实际屏幕字符显示的

磊磊映画 发表于 2014-11-13 15:41:45

液晶屏中是需要对地址进行+0x30的,才是实际显示的地址,数据LCDbyte的低四位如果大于0x09(估计是10一个一行)显示地址是下一行,小于就在本行显示+0x30

mo_fish 发表于 2014-11-13 15:46:18

2楼的解释很合理

Mortimer 发表于 2014-11-13 17:56:53

磊磊映画 发表于 2014-11-13 15:41
液晶屏中是需要对地址进行+0x30的,才是实际显示的地址,数据LCDbyte的低四位如果大于0x09(估计是10一个一 ...

感觉有问题,我不理解count%9是什么意思

磊磊映画 发表于 2014-11-13 18:30:01

Mortimer 发表于 2014-11-13 17:56
感觉有问题,我不理解count%9是什么意思

已经多加一个整行了,显示的时候就算列就行了啊

hzyyl2008 发表于 2014-11-15 17:16:54

将LCDByte的高低半字节分别转换成ASCII码,如LCDbyte = 0xA3,首先取高半字节0X0A,如果大于9则除以9取余数1,加上0X40后得0X41,即字符“A",如果小于9则加0X30得到数字”0“-”9“,然后取低半字节重复高半字节的处理。

Mortimer 发表于 2014-12-20 23:48:01

hzyyl2008 发表于 2014-11-15 17:16
将LCDByte的高低半字节分别转换成ASCII码,如LCDbyte = 0xA3,首先取高半字节0X0A,如果大于9则除以9取余数 ...

恩,非常有道理,谢谢~
页: [1]
查看完整版本: 用RC522做门禁,有个函数看不懂,求解释