LCD1602液晶十进制转十六进制显示
时间:10-02
整理:3721RD
点击:
/*十进制转十六进制,显示程序 最大十进制转换值为65535*/
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp_table[]={0,0,0,0};
uchar value1;
sbit RS=P3^7;
sbit EN=P3^6;
void delay_ms(uint ms) //一毫秒延时
{
uint x,y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--);
}
void write_lcd1602_cmd(uchar cmd)//写LCD1602液晶命令
{
RS=0;
EN=0;
P0=cmd;
delay_ms(5);
EN=1;
delay_ms(5);
EN=0;
}
void write_lcd1602_data(uchar dat)//写LCD1602液晶数据
{
RS=1;
EN=0;
P0=dat;
delay_ms(5);
EN=1;
delay_ms(5);
EN=0;
}
void lcd1602_init(void) //LCD1602液晶初始化
{
EN=0;
write_lcd1602_cmd(0x38);
write_lcd1602_cmd(0x0C);
write_lcd1602_cmd(0x06);
write_lcd1602_cmd(0x01);
write_lcd1602_cmd(0x80);
write_lcd1602_data('0');
write_lcd1602_data('X');
}
void panduan(void) //判断VALU1的值
{
switch (value1)
{
case 10:
write_lcd1602_data('a');
break;
case 11:
write_lcd1602_data('b');
break;
case 12:
write_lcd1602_data('c');
break;
case 13:
write_lcd1602_data('d');
break;
case 14:
write_lcd1602_data('e');
break;
case 15:
write_lcd1602_data('f');
break;
}
}
void change(uint value) //如1111 1111 1111 1111 -0xffff -65535
{
temp_table[0]=(value&0xf000)>>12;// 1111
temp_table[1]=(value&0xf00)>>8; // 1111
temp_table[2]=(value&0xf0)>>4; // 1111
temp_table[3]=(value&0xf); // 1111
}
void display(void) //显示
{
uchar x;
write_lcd1602_cmd(0x82);
for(x=0;x<4;x++)//取以拆分temp_table[]的数进行显示
{
value1=temp_table[x];
if(value1>=10)
panduan();
else
write_lcd1602_data(0x30+value1);
}
}
void main()
{
lcd1602_init(); //液晶初始化
while(1)
{
change(65535); //改变() 十进制的值
display(); //16位十六进制显示
}
}
无聊的时候写的程序,还没加键盘输入!大家看看有没有改进的地方
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar temp_table[]={0,0,0,0};
uchar value1;
sbit RS=P3^7;
sbit EN=P3^6;
void delay_ms(uint ms) //一毫秒延时
{
uint x,y;
for(x=ms;x>0;x--)
for(y=110;y>0;y--);
}
void write_lcd1602_cmd(uchar cmd)//写LCD1602液晶命令
{
RS=0;
EN=0;
P0=cmd;
delay_ms(5);
EN=1;
delay_ms(5);
EN=0;
}
void write_lcd1602_data(uchar dat)//写LCD1602液晶数据
{
RS=1;
EN=0;
P0=dat;
delay_ms(5);
EN=1;
delay_ms(5);
EN=0;
}
void lcd1602_init(void) //LCD1602液晶初始化
{
EN=0;
write_lcd1602_cmd(0x38);
write_lcd1602_cmd(0x0C);
write_lcd1602_cmd(0x06);
write_lcd1602_cmd(0x01);
write_lcd1602_cmd(0x80);
write_lcd1602_data('0');
write_lcd1602_data('X');
}
void panduan(void) //判断VALU1的值
{
switch (value1)
{
case 10:
write_lcd1602_data('a');
break;
case 11:
write_lcd1602_data('b');
break;
case 12:
write_lcd1602_data('c');
break;
case 13:
write_lcd1602_data('d');
break;
case 14:
write_lcd1602_data('e');
break;
case 15:
write_lcd1602_data('f');
break;
}
}
void change(uint value) //如1111 1111 1111 1111 -0xffff -65535
{
temp_table[0]=(value&0xf000)>>12;// 1111
temp_table[1]=(value&0xf00)>>8; // 1111
temp_table[2]=(value&0xf0)>>4; // 1111
temp_table[3]=(value&0xf); // 1111
}
void display(void) //显示
{
uchar x;
write_lcd1602_cmd(0x82);
for(x=0;x<4;x++)//取以拆分temp_table[]的数进行显示
{
value1=temp_table[x];
if(value1>=10)
panduan();
else
write_lcd1602_data(0x30+value1);
}
}
void main()
{
lcd1602_init(); //液晶初始化
while(1)
{
change(65535); //改变() 十进制的值
display(); //16位十六进制显示
}
}
无聊的时候写的程序,还没加键盘输入!大家看看有没有改进的地方
附上图片一张
学习学习谢谢分享