发一个我用开的12864程序,正常使用中。
- /*--------------------------------------------------------------------------
- LCD12864.H
- 128*64 液晶显示屏
- --------------------------------------------------------------------------*/
- #ifndef __LCD12864_H__
- #define __LCD12864_H__
- /*****************************************************************************/
- //定义参数
- sbit CLK_l = P1^3; //时钟 6脚
- sbit DAT_l = P1^4; //数据 5脚
- sbit RES_l = P1^0; //复位 17脚
-
- /*******************************************************************************/
- //液晶显示程序
- /******************************************************************************/
- //发送一个字节(底层函数)
- void write_lcd_byte(uchar bbyte) {
- uchar i;
- for(i=0;i<8;i++){
- DAT_l=bbyte&0x80; //取出最高位
- CLK_l=1;
- CLK_l=0;
- bbyte<<=1; //左移
- }
- }
- /*****************************************************************************/
- //写指令或数据 (0,指令) (1,数据)
- void write_lcd_code(bit start, uchar ddata) {
- uchar start_data,Hdata,Ldata;
- if(start==0)
- start_data=0xf8; //0:写指令
- else
- start_data=0xfa; //1:写数据
- Hdata=ddata&0xf0; //取高四位
- Ldata=(ddata<<4)&0xf0; //取低四位
- write_lcd_byte(start_data); //发送起始信号
- DelayUs(1); //延时是必须的
- write_lcd_byte(Hdata); //发送高四位
- DelayUs(1); //延时是必须的
- write_lcd_byte(Ldata); //发送低四位
- DelayUs(1); //延时是必须的
- }
- /*****************************************************************************/
- //向lcd发送一个字符串,长度64字符之内。
- void write_lcd_word(uchar *str){
- while(*str != '\0'){
- write_lcd_code(1,*str++);
- }
- *str = 0;
- }
- /****************************************************************************/
- //初始化lcd
- void Init_Lcd(void) {
- DelayMs(1); //启动等待,等lcd讲入工作状态
- write_lcd_code(0,0x30); //8 位介面,基本指令集
- write_lcd_code(0,0x0c); //显示打开,光标关,反白关
- write_lcd_code(0,0x01); //清屏,将DDRAM的地址计数器归零
- DelayMs(1); //启动等待,等lcd讲入工作状态
- }
- /******************************************************************************/
- //清屏函数
- void Clean(){
- uint j=0;
- uchar x,y;
- for(y=0;y<32;y++) {
- write_lcd_code(0,0x36);//功能设置---8BIT控制界面,扩充指令集
- write_lcd_code(0,0x80+y); //行地址
- write_lcd_code(0,0x80); //列地址
- write_lcd_code(0,0x30);
- for(x=0;x<32;x++){
- write_lcd_code(1,0x00);
- }
- }
- }
- void Clr_Lcd(void){
- write_lcd_code(0,0x01);
- DelayMs(1); //启动等待,等lcd讲入工作状态
- }
- #endif
复制代码
|