完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 lu5222283 于 2013-1-24 17:25 编辑 请大侠们指导下,我等感激 /*****************************************************************/ /* */ /*名称: 12864液晶移动显示 */ /*功能: 12864液晶移动显示 */ /* */ /*编写日期: */ /*****************************************************************/ #include #include #define uchar unsigned char #define uint unsigned int ***it LCD_RS = P2^3; ***it LCD_RW = P2^4; ***it LCD_EN = P2^5; uchar r_dat; uchar count[2]; uchar code num[]={"0123456789ABCDEF"}; uchar code dis2[] = {"火炬03通信测试"}; uchar code dis1[] = {"Systen temp...."}; void display(void); void delay(int ms); bit lcd_busy(); void lcd_wcmd(uchar cmd); void lcd_wdat(uchar dat); void lcd_pos(uchar pos); void lcd_init(); void lcd_clr(); void flash(); void init_serial(void); void senddata(uchar dat); uchar ascii_data(uchar x); /*******************************************************************/ /* /* 延时子程序 /* /*******************************************************************/ void 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; } /*******************************************************************/ /* /*写指令数据到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) { 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(0x30); //8位数据 delay(5); lcd_wcmd(0x01); delay(5); lcd_wcmd(0x06); 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(0x08); //关闭显示 delay(200); //延时 lcd_wcmd(0x0c); //开显示 delay(200); lcd_wcmd(0x08); //关闭显示 delay(200); //延时 lcd_wcmd(0x0c); //开显示 delay(200); } void display(void) { uchar i; lcd_clr(); lcd_pos(0x00); //设置显示位置为第一行第0列 i = 0; while(dis2 != ' |