《招聘6维度的问题》由会员分享,可在线阅读,更多相关《招聘6维度的问题(6页珍藏版)》请在金锄头文库上搜索。
1、/*/ /* */ /*名称: 12864 液晶移动显示 */ /*功能: 12864 液晶移动显示 */ /* E-mail: */*编写日期: 2009.07 */ /*/#include #include #define uchar unsigned char#define uint unsigned intsbit LCD_RS = P20;sbit LCD_RW = P21;sbit LCD_EN = P22;uchar code dis1 = I LOVE 8051 MCU;uchar code dis2 = TEL:13808311069;/*/*/* 延时子程序/*/*/voi
2、d delay(int ms)int i;while(ms-)for(i = 0; i 250; i+)_nop_();_nop_();_nop_();_nop_(); /*/*/*检查 LCD 忙状态/*lcd_busy 为 1 时,忙,等待。lcd-busy 为 0 时,闲,可写指令与数据。/*/*/bit lcd_busy()bit result;LCD_RS = 0;LCD_RW = 1;LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();result = (bit)(P0&0x80);LCD_EN = 0;return result;/*/*/*写指
3、令数据到 LCD/*RS=L,RW=L,E=高脉冲,D0-D7= 指令码。/*/*/void lcd_wcmd(uchar cmd)while(lcd_busy();LCD_RS = 0;LCD_RW = 0;LCD_EN = 0;_nop_();_nop_();P0 = cmd;_nop_();_nop_();_nop_(); _nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;/*/*/*写显示数据到 LCD/*RS=H,RW=L,E=高脉冲,D0-D7=数据。/*/*/void lcd_wdat(uchar dat)
4、while(lcd_busy();LCD_RS = 1;LCD_RW = 0;LCD_EN = 0;P0 = dat;_nop_();_nop_();_nop_();_nop_();LCD_EN = 1;_nop_();_nop_();_nop_();_nop_();LCD_EN = 0;/*/*/* 设定显示位置/*/*/void lcd_pos(uchar pos)lcd_wcmd(pos|0x80); /数据指针=80+地址变量/*/*/* LCD 初始化设定/*/*/void lcd_init()delay(15); /等待 LCD 电源稳定lcd_wcmd(0x38); /16*2
5、显示,5*7 点阵,8 位数据delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x38);delay(5);lcd_wcmd(0x0c); /显示开,关光标delay(5);lcd_wcmd(0x06); /移动光标delay(5);lcd_wcmd(0x01); /清除 LCD 的显示内容delay(5);/*/*/* 清屏子程序/*/*/void lcd_clr()lcd_wcmd(0x01); /清除 LCD 的显示内容delay(5);/*/*/* 闪动子程序/*/*/void flash()delay(600); /控制停留时间lcd_wcmd(0
6、x08); /关闭显示delay(200); /延时lcd_wcmd(0x0c); /开显示delay(200);lcd_wcmd(0x08); /关闭显示delay(200); /延时lcd_wcmd(0x0c); /开显示delay(200);/*/*/* 主程序/*/*/main()uchar i,j;delay(10);lcd_init(); /初始化 LCDwhile(1)lcd_clr();lcd_pos(0x10); /设置显示位置为第一行第 17 列i = 0;while(dis1i != 0) /显示字符 lcd_wdat(dis1i);i+;lcd_pos(0x50); /设置显示位置为第二行第 17 列i = 0;while(dis2i != 0)lcd_wdat(dis2i); /显示字符 i+;for(j=0;j16;j+) /向左移动 16 格lcd_wcmd(0x18); /字符同时左移一格delay(100); /控制移动时间flash(); /闪动二次