按你的要求給你寫一個示例+仿真,有詳細注釋,看懂后就可以隨心所欲的顯示各種字符。
- #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);
- }
復制代碼
|