函数中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进制数。
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中。