完整代码下载:
12864波形 显示.zip
(45.33 KB, 下载次数: 38)
12864显示程序如下:
- #include<lcd12864.h>
- /*------------------检查忙位-----------------------------*/
- void Check_Busy()
- {
- LCD12864_RS=0;
- LCD12864_RW=1;
- LCD12864_E=1;
- LCD12864_DATAPINS=0xff;
- while((LCD12864_DATAPINS&0x80)==0x80);
- LCD12864_E=0;
- }
- /******************************************
- *函数名 :Delay
- *函数功能 :延时
- *输入 :t
- *输出 :无
- *说明 :该函数是在12MHz
- *******************************************/
- void Delay(unsigned int t)
- {
- unsigned int i,j ;
- for(i=0;i<t;i++)
- for(j=0;j<10;j++);
- }
- /****************************************************
- * 函 数 名 : LcdWriteCom
- * 函数功能 : 向LCD写入一个字节的命令
- * 输 入 : com
- * 输 出 : 无
- *****************************************************/
- void LcdWriteCom(unsigned char com)
- {
- Check_Busy();
- LCD12864_RS=0;
- LCD12864_RW=0;
- LCD12864_E=1;
- LCD12864_DATAPINS=com;
- Delay(5);
- LCD12864_E=0;
- Delay(5);
- }
- /**********************************************
- * 函 数 名 : LcdWriteData
- * 函数功能 : 向LCD写入一个字节的数据
- * 输 入 : dat
- * 输 出 : 无
- ***********************************************/
- void LcdWriteData(unsigned char dat)
- {
- Check_Busy();
- LCD12864_RS=1;
- LCD12864_RW=0;
- LCD12864_E=1;
- LCD12864_DATAPINS=dat;
- Delay(5);
- LCD12864_E=0 ;
- Delay(5);
- }
- /*******************************************
- *函数名: Lcd_pos
- *函数功能: 定位显示
- *入口参数: x,y,date
- *输出参数: 无
- ********************************************/
- void lcd_pos(uchar X,uchar Y)
- {
- uchar pos;
- if(X==0)
- {X=0x80;}
- else if(X==1)
- {X=0x90;}
- else if(X==2)
- {X=0x88;}
- else if(X==3)
- {X=0x98;}
- pos = X+Y;
- LcdWriteCom(pos); //显示地址
- }
- /****************************************
- * 函 数 名 : LcdInit()
- * 函数功能 : 初始化LCD屏
- * 输 入 : 无
- * 输 出 : 无
- ****************************************/
- void LcdInit()
- {
- Delay(2000);
- LcdWriteCom(0x30);
- Delay(10); //选择基本指令集
- LcdWriteCom(0x30); //选择8bit数据流
- Delay(5);
- LcdWriteCom(0x0c); //开显示(无游标、不反白)
- Delay(10);
- LcdWriteCom(0x01); //清除显示,并且设定地址指针为00H
- Delay(500);
- LcdWriteCom(0x06); //指定在资料的读取及写入时,设定游标的移动方向及指定显示的移位
- Delay(0);
- }
- /*------------------显示字符串--------------------------*/
- void hzkdis(unsigned char code*s)
- {
- while(*s>0)
- {
- LcdWriteData(*s);
- s++;
- Delay(50);
- }
- }
- //------------------清整个GDRAM
- void clrgdram()
- {
- unsigned char x,y ;
- for(y=0;y<64;y++)
- for(x=0;x<16;x++)
- {
- LcdWriteCom(0x34);
- LcdWriteCom(y+0x80); //行地址
- LcdWriteCom(x+0x80); //列地址
- LcdWriteCom(0x30);
- LcdWriteData(0x00);
- LcdWriteData(0x00);
- }
- }
- //------------------------------------------------------------
- void clrscreen()
- {
- LcdWriteCom(0x01);
- Delay(10);
- }
- unsigned char ReadByte(void)
- {
- unsigned char byReturnValue ;
- Check_Busy();
- LCD12864_DATAPINS=0xff ;
- LCD12864_RS=1 ;
- LCD12864_RW=1 ;
- LCD12864_E=0 ;
- LCD12864_E=1 ;
- byReturnValue=LCD12864_DATAPINS ;
- LCD12864_E=0 ;
- return byReturnValue ;
- }
- //增加画点子程序
- void DrawPoint(unsigned char X,unsigned char Y,unsigned char Color)
- {
- unsigned char Row,Tier,Tier_bit ;
- unsigned char ReadOldH,ReadOldL ;
- LcdWriteCom(0x34);
- LcdWriteCom(0x36);
- Tier=X>>4 ;
- Tier_bit=X&0x0f ;
- if(Y<32)
- {
- Row=Y ;
- }
- else
- {
- Row=Y-32 ;
- Tier+=8 ;
- }
- LcdWriteCom(Row+0x80);
- LcdWriteCom(Tier+0x80);
- ReadByte();
- ReadOldH=ReadByte();
- ReadOldL=ReadByte();
- LcdWriteCom(Row+0x80);
- LcdWriteCom(Tier+0x80);
- if(Tier_bit<8)
- {
- switch(Color)
- {
- case 0 :
- ReadOldH&=(~(0x01<<(7-Tier_bit)));
- break ;
- case 1 :
- ReadOldH|=(0x01<<(7-Tier_bit));
- break ;
- case 2 :
- ReadOldH^=(0x01<<(7-Tier_bit));
- break ;
- default :
- break ;
- }
- LcdWriteData(ReadOldH);
- LcdWriteData(ReadOldL);
- }
- else
- {
- switch(Color)
- {
- case 0 :
- ReadOldL&=(~(0x01<<(15-Tier_bit)));
- break ;
- case 1 :
- ReadOldL|=(0x01<<(15-Tier_bit));
- break ;
- case 2 :
- ReadOldL^=(0x01<<(15-Tier_bit));
- break ;
- default :
- break ;
- }
- LcdWriteData(ReadOldH);
- LcdWriteData(ReadOldL);
- }
- LcdWriteCom(0x30);
- }
复制代码 |