单片机/MCU论坛
直播中

陈先生

12年用户 168经验值
擅长:可编程逻辑
私信 关注
[文章]

LCD1602液晶十进制转十六进制显示

`/*十进制转十六进制,显示程序 最大十进制转换值为65535*/
#include
#define uint unsigned int
#define uchar unsigned char
uchar temp_table[]={0,0,0,0};
uchar value1;
***it RS=P3^7;
***it 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位十六进制显示
        }   
}
无聊的时候写的程序,还没加键盘输入!大家看看有没有改进的地方

` IMG_20131205_153228.jpg

回帖(2)

陈先生

2013-12-5 15:49:18
附上图片一张
举报

郭磊

2015-12-13 09:15:47
学习学习谢谢分享
举报

更多回帖

发帖
×
20
完善资料,
赚取积分