微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > LCD1602液晶十进制转十六进制显示

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位十六进制显示
        }   
}
无聊的时候写的程序,还没加键盘输入!大家看看有没有改进的地方

附上图片一张


学习学习谢谢分享

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

网站地图

Top