按你的要求给你写一个示例+仿真,有详细注释,看懂后就可以随心所欲的显示各种字符。
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit LCD_RS=P3^5; //液晶屏RS口 写指令低,写数据高
- sbit LCD_EN=P3^4; //液晶屏EN口 高脉冲使能写指令/数据,低跳变执行
- uint value[]={1500,1000,1500,2000,1500};
- uint ms[]={0,45,0,45,0};
- uint pwm_value;
- /*******100us延时程序********/
- void delay(uint x)
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=10;b>0;b--);
- }
- /*******1ms延时程序********/
- void delay_ms(uint x)
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=125;b>0;b--);
- }
- /*******液晶写指令程序********/
- void write_com(uchar com)
- {
- LCD_EN=0; //初始设置LCD_EN低电平
- LCD_RS=0; //允许写指令
- P0=com; //传递指令
- delay(10); //延时1ms
- LCD_EN=1; //使能写入
- delay(10); //延时1ms
- LCD_EN=0; //低跳变执行
-
- }
- /*******液晶写数据程序********/
- void write_date(uchar date)
- {
- // LCD_EN=0; //初始设置LCD_EN低电平
- LCD_RS=1; //允许写数据
- P0 =date; //传递数据
- delay(10); //延时1ms
- LCD_EN=1; //使能写入
- delay(10); //延时1ms
- LCD_EN=0; //低跳变执行
-
- }
- /*******液晶初始化程序********/
- void init() //设置显示模式、
- {
- write_com(0x38);//设置16*2显示,5*7点阵,8位数据接口
- write_com(0x01);//显示清零,数据指针清零
- write_com(0x0c);//设置开显示,不显光标
- write_com(0x06);//设置写一个字符后地址指针加1
- }
- /**********************主程序*************************/
- void main()
- {
- uchar i; //定义循环变量
- init(); //初始化LCD程序
- for(i=0;i<5;i++)
- {
- pwm_value=value[i];//通过数组就可以改变舵机的转角度
- write_com(0x80);//LCD1602的第一行第0位置起
- write_date(value[i]/1000%10+'0');//LCD显示数据的千位
- write_date(value[i]/100%10+'0');//LCD显示数据的百位
- write_date(value[i]/10%10+'0');//LCD显示数据的十位
- write_date(value[i]%10+'0');//LCD显示数据的个位
- write_com(0xc0+i*3);//LCD1602的第二行第0位置起,每次+3格
- write_date(ms[i]/10+'0');//LCD显示数据的十位
- write_date(ms[i]%10+'0');//LCD显示数据的个位
- delay_ms(1000);
- }
- while(1);
- }
复制代码
|