/*********************************************************************** 工 程:ST7920驱动的12864液晶的3线串行驱动模式 创建日期:2008年11月23日 创 建 人:lqg 邮 箱:lqg_k@163.com QQ:253076338 引脚定义:RS(CS)=====> PD3 //PB0 RW(SID)====> PD4 //PB1 EN(SCLK)===> PD6// PB2 PSB为硬件控制,接高电平为8位或4位的并行模式,接低电平为串行模式 ************************************************************************/ #include <iom16v.h> #include <macros.h> #define uchar unsigned char #define uint unsigned int #define nop() NOP() #define xtal 8 #define Set_CS() DDRD |= (1<<3);PORTD |= (1<<3) #define Set_SID() DDRD |= (1<<4);PORTD |= (1<<4) #define Set_SCLK() DDRD |= (1<<6);PORTD |= (1<<6) #define Clr_CS() DDRD |= (1<<3);PORTD &=~(1<<3) #define Clr_SID() DDRD |= (1<<4);PORTD &=~(1<<4) #define Clr_SCLK() DDRD |= (1<<6);PORTD &=~(1<<6) //==================================================================== //函数声明 void Delay(uint ms); //延时子程序 void W_1byte(uchar RW, uchar RS, uchar W_data); void Write_8bits(uint W_bits); void LCD_Init(void); /******************************************************************** ********************************************************************/ //=================================================================== const uchar mynew1[]={"欢迎你来到我的家"}; const uchar mynew2[]={"Create by:LQG "}; const uchar mynew3[]={"海内存知己"}; const uchar mynew4[]={"天涯若比邻"}; /******************************************************************** ********************************************************************/ void main() { uchar i = 0; DDRD &= ~BIT(7); PORTD &= ~BIT(7); DDRC |=BIT(6); PORTC &= ~BIT(6); DDRC &= ~BIT(7); PORTC &= ~BIT(7); Clr_CS(); Clr_SID(); Clr_SCLK(); LCD_Init(); while(1) { nop(); nop(); W_1byte(0,0,0x80); //显示的地址0x80 nop(); for(i=0;mynew1[ i]!='\0';i++) { W_1byte(0,1,mynew1); } W_1byte(0,0,0x90); //显示的地址0x90 for(i=0;mynew2!='\0';i++) { W_1byte(0,1,mynew2); } W_1byte(0,0,0x88); //显示的地址0x88 for(i=0;mynew3!='\0';i++) { W_1byte(0,1,mynew3); } W_1byte(0,0,0x98+3); //显示的地址0x98 +3是空格三个字开始写,否则乱码 for(i=0;mynew4!='\0';i++) { W_1byte(0,1,mynew4); } nop(); for(;;) { continue; } } } /******************************************************************/ void LCD_Init(void) { uchar cmd; cmd=0x30; //功能设置 8位数据,基本指令 W_1byte(0,0,cmd); Delay(2); cmd=0x0C; //显示状态 ON,游标OFF,反白OFF W_1byte(0,0,cmd); //写指令 Delay(2); cmd=0x01; //清除显示 W_1byte(0,0,cmd); //写指令 Delay(2); cmd=0x02; //地址归位 W_1byte(0,0,cmd); //写指令 Delay(2); cmd=0x80; //设置DDRAM地址 W_1byte(0,0,cmd); //写指令 Delay(2); //延时 } /******************************************************************* 函 数 名:W_1byte 入口参数:RW、RS、W_data 出口参数:无 建立日期:2007年3月3日 修改日期: 函数作用:写一个字节的数据到12864液晶,包括指令和数据 说 明:RW=1,从液晶读数据到MCU;RW=0,写一个数据到液晶; (一般RW都设为0,即只向液晶写数据,不读数据) RS=1,写入的是数据;RS=0,写入的是指令; 一般模式:RW=0,RS=1;写数据 RW=0,RS=0;写指令 ********************************************************************/ void W_1byte(uchar RW, uchar RS, uchar W_data) { uint H_data,L_data,S_ID = 0xf8; //11111RWRS0 if(RW == 0) { S_ID &=~ 0x04; } else //if(RW==1) { S_ID |= 0X04; } if(RS == 0) { S_ID &=~ 0x02; } else //if(RS==1) { S_ID |= 0X02; } H_data = W_data; H_data &= 0xf0; //屏蔽低4位的数据 L_data = W_data; //xxxx0000格式 L_data &= 0x0f; //屏蔽高4位的数据 L_data <<= 4; //xxxx0000格式 Set_CS(); Write_8bits(S_ID); //发送S_ID Write_8bits(H_data); //发送H_data Write_8bits(L_data); //发送L_data Clr_CS(); } /******************************************************************** 函 数 名:Write_8bits 入口参数:W_bits 出口参数:无 建立日期:2007年3月3日 修改日期: 函数作用:负责串行输出8个bit位 说 明: ********************************************************************/ void Write_8bits(uint W_bits) { uint i,Temp_data; for(i=0; i<8; i++) { Temp_data = W_bits; Temp_data <<= i; if((Temp_data&0x80)==0) //bit7 is zero { Clr_SID(); nop(); Set_SCLK(); nop(); nop(); Clr_SCLK(); nop(); Clr_SID(); } else //bit7 is one { Set_SID(); nop(); Set_SCLK(); nop(); nop(); Clr_SCLK(); nop(); Clr_SID(); } } } /******************************************************************** 函 数 名:Delay 入口参数:ms 出口参数:无 建立日期:2007年3月3日 修改日期: 函数作用:毫秒级的延时程序,当晶振为1Mhz时,xtal=1; 说 明: ********************************************************************/ void Delay(uint ms) { uint i; while(ms--) { for(i=1;i<(uint)(xtal*143-2);i++) ; } } //===================================================================*/ |
共1条
1/1 1 跳转至页
LCD12864液晶显示程序

只看楼主 1楼
共1条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
发原创文章 【每月瓜分千元赏金 凭实力攒钱买好礼~】 | |
【EEPW在线】E起听工程师的声音! | |
“我踩过的那些坑”主题活动——第001期 | |
高校联络员开始招募啦!有惊喜!! | |
【工程师专属福利】每天30秒,积分轻松拿!EEPW宠粉打卡计划启动! | |
送您一块开发板,2025年“我要开发板活动”又开始了! | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
【我踩过的那些坑】电感选型错误导致的处理器连接不上被打赏50分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏10分 | |
【我踩过的那些坑】DRC使用位置错误导致的问题被打赏100分 | |
我踩过的那些坑之混合OTL功放与落地音箱被打赏50分 | |
汽车电子中巡航控制系统的使用被打赏10分 | |
【我踩过的那些坑】工作那些年踩过的记忆深刻的坑被打赏100分 | |
分享汽车电子中巡航控制系统知识被打赏10分 | |
分享安全气囊系统的检修注意事项被打赏10分 | |
分享电子控制安全气囊计算机知识点被打赏10分 | |
【分享开发笔记,赚取电动螺丝刀】【OZONE】使用方法总结被打赏20分 |