微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 函数中temp+‘7’是什么意思,为什么能够实现显示16进制数

函数中temp+‘7’是什么意思,为什么能够实现显示16进制数

时间:10-02 整理:3721RD 点击:
请教大神门帮我解释一下:
void lcd1602_disp_hex(unsigned char dat)
{
unsigned char temp;
temp = dat / 16;
if(temp <= 9)
  lcd1602_write_byte(temp + '0', 1);
else
  lcd1602_write_byte(temp + '7', 1);
temp = dat % 16;
if(temp <= 9)
  lcd1602_write_byte(temp + '0', 1);
else
  lcd1602_write_byte(temp + '7', 1);  
}

这个函数中,temp+‘7’是什么意思,为什么能够实现显示16进制数。

自己看ASCALL的表,应该是要显示A-F

个人感觉应该是lcd1602_write_byte(temp + 'a', 1);

看来你对ASCII码还不太熟悉,这是玩单片机必备的常识。

这是一个用十六进制显示一字节数据的代码。unsigned char dat中是一个0—255(16进制00-FF)的数值。
temp = dat / 16;等于对dat右移4位,即temp中是dat高半字节的一位16进制数。
若其值是0-9就转换成0-9的ASCII码去显示(即temp+'0')。例如temp =9,二进制为0001001,加上'0'的ASCII码00110000后temp=00111001就是9的ASCII码值,就显示出9。
若其值大于9就转换成A-F的ASCII码去显示(即temp+'7')。例如temp =10(十六进制A),二进制为00001010,加上'7'的ASCII码00110111后temp=01000001就是A的ASCII码值,就显示出A。
对dat低半字节处理类似,只是用temp = dat % 16;把dat低半字节取到temp中。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top