收藏 分销(赏)

液晶160128A-C语言.doc

上传人:二*** 文档编号:4708711 上传时间:2024-10-10 格式:DOC 页数:18 大小:97KB 下载积分:5 金币
下载 相关 举报
液晶160128A-C语言.doc_第1页
第1页 / 共18页
本文档共18页,全文阅读请下载到手机保存,查看更方便
资源描述
. //*************************************************************** //连线表: CPU=W78E54B CPUClock=12Mhz * // LCM ----- CPU * // WR ----- WR * // RD ----- RD * // CS ----- P2.7 * // A0(RS)----- P2.0 * // DB0~7 ----- P0.0~7 * // RESET ----- P1.0 * // 注:本程序BUS总线模式程序和IO模式程序的硬件连线方式一致 * // 但IO模式的时候需要在P0口接10K上拉电阻 * //*************************************************************** #include <reg52.h> #include <intrins.h> #include <UserDef.h> //自己些的一个头文件,主要是Uchar和二进制 #define Graphic 1 #define TXT 0 #define LcmXPixel 240 //横向宽度 #define LcmYPixel 128 //纵向高度 #define Uchar unsigned char #define Uint unsigned int //#define BUS_MODE //总线模式驱动液晶 #define IO_MODE //IO口模式驱动液晶 #ifdef BUS_MODE char xdata LcmCmdPort _at_ 0x0100; //CS低有效 RS高--命令 char xdata LcmDatPort _at_ 0x0000; //CS低有效 RS低--数据 #endif #ifdef IO_MODE sbit CSP = P2^7; sbit RSP = P2^0; sbit WRP = P3^6; sbit RDP = P3^7; #define LcmDataBus P0 #endif sbit RES = P1^0; // sbit Key = P3^2; // sbit p0_dr=P3^4; //坚鸿测试架增加指令,控制P0口输入输出 sbit FS = P3^5; //字体选择,一般在硬件接口直接接电源或地 sbit P33=P3^3; Uchar code str0[]; 精选文档 . Uchar code bmp1[]; void int_zhongduan(); void delay(unsigned int t); //*************************************************************** //液晶驱动底层程序开始 //*************************************************************** //指令&数据读写状态 void CheckRWCD(void) { #ifdef BUS_MODE while((LcmCmdPort & 0x03) != 0x03); //低电平忙 #endif #ifdef IO_MODE p0_dr=1;//坚鸿测试架增加指令,控制P0口输入输出 CSP = 0; WRP = 1; RSP = 1; LcmDataBus = 0xff; RDP = 0; while((LcmDataBus & 0x03) != 0x03); RDP = 1; CSP = 1; p0_dr=0;//坚鸿测试架增加指令,控制P0口输入输出 #endif } //数据自动写状态 void CheckAutoWrite(void) { #ifdef BUS_MODE while((LcmCmdPort & 0x08) == 0); //低电平忙 #endif #ifdef IO_MODE p0_dr=1;//坚鸿测试架增加指令,控制P0口输入输出 CSP = 0; WRP = 1; RSP = 1; LcmDataBus = 0xff; RDP = 0; while((LcmDataBus & 0x08) ==0 ); RDP = 1; 精选文档 . CSP = 1; p0_dr=0;//坚鸿测试架增加指令,控制P0口输入输出 #endif } //屏读/屏考贝出错状态 void CheckScreen(void) { #ifdef BUS_MODE while(LcmCmdPort & 0x40); //1出错,0正确 #endif #ifdef IO_MODE p0_dr=1;//坚鸿测试架增加指令,控制P0口输入输出 CSP = 0; WRP = 1; RSP = 1; LcmDataBus = 0xff; RDP = 0; while(LcmDataBus & 0x40); RDP = 1; CSP = 1; p0_dr=0;//坚鸿测试架增加指令,控制P0口输入输出 #endif } //一个数据子写入函数 void LcmWriteData(Uchar uData) { #ifdef BUS_MODE LcmDatPort = uData; #endif #ifdef IO_MODE CSP = 0; RDP = 1; RSP = 0; LcmDataBus = uData; WRP = 0; WRP = 1; CSP = 1; LcmDataBus = 0xff; #endif } 精选文档 . //一个数据读出函数 Uchar LcmReadData( void ) { Uchar uData; #ifdef BUS_MODE uData = LcmDatPort; #endif #ifdef IO_MODE p0_dr=1;//坚鸿测试架增加指令,控制P0口输入输出 CSP = 0; WRP = 1; RSP = 0; LcmDataBus = 0xff; RDP = 0; uData = LcmDataBus; RDP = 1; CSP = 1; p0_dr=0;//坚鸿测试架增加指令,控制P0口输入输出 #endif return uData; } //无参数指令写入函数 void LcmWriteCommand(Uchar Command) { CheckRWCD(); //检测指令读写状态 #ifdef BUS_MODE LcmCmdPort = Command; #endif #ifdef IO_MODE CSP = 0; RDP = 1; RSP = 1; LcmDataBus = Command; WRP = 0; WRP = 1; CSP = 1; LcmDataBus = 0xff; #endif 精选文档 . } //单参数指令写入函数 void LcmWriteCommandWith1Par(Uchar Parameter,Uchar Command) { LcmWriteData(Parameter); LcmWriteCommand(Command); } //双参数指令写入函数 void LcmWriteCommandWith2Par(Uchar Parameter1,Uchar Parameter2,Uchar Command) { LcmWriteData(Parameter1); LcmWriteData(Parameter2); LcmWriteCommand(Command); } //LCM初始化函数 void LcmInit( void ) { LcmWriteCommandWith2Par(0x00,0x00,0x40); //设置文本显示区首地址 LcmWriteCommandWith2Par(LcmXPixel/8,0x00,0x41); //设置文本显示区宽度 LcmWriteCommandWith2Par(0x00,0x08,0x42); //设置图形显示区首地址0x0800 LcmWriteCommandWith2Par(LcmXPixel/8,0x00,0x43); //设置图形显示区宽度 LcmWriteCommand(0xA7); //设置光标形状 8x8方块 LcmWriteCommand(0x81); //显示方式设置 文本xor图形(异或) LcmWriteCommand(0x9C); //显示开关设置 文本开,图形开,光标闪烁关 } //函数功能: 延时函数 //入口参数: 需要延时的毫秒数(MS) //出口参数: 无 void DelayMS(unsigned int MS) { unsigned char us,usn; while(MS!=0) { usn = 2; //for 12M while(usn!=0) { us=0xf6; while (us!=0){us--;}; usn--; } 精选文档 . MS--; } } //函数功能: 特殊延时函数 //入口参数: 需要延时的?.?秒(Second.MS100) //出口参数: 无 void DelayKey(unsigned int Second , unsigned int MS100) { //输入精确到0.1S,是用, unsigned int i; for(i=0;i<Second*100+MS100*10;i++) { if(Key==0) { DelayMS(20); while(Key==0) {DelayMS(20);} break; } else DelayMS(10); } } //清显示存储器函数 void LcmClear( Uchar FillByte ) { Uint i = 8192; //此处仅清8K RAM,如果您32K RAM都使用,请修改i=32768(后面也要改) if(FillByte) //注意如果填充ff时,如果RAM仅使用了8K,那么8192次会写入到文本区 { //会形成乱码.(24064出厂时候默认将R7断开,即默认使用8KRAM) i -= 2*1024;//所以如果填入ff时候要扣除2K的文本区 LcmWriteCommandWith2Par(0x00,0x08,0x24); //填充0xff时候要在图形区 } else LcmWriteCommandWith2Par(0x00,0x00,0x24); LcmWriteCommand(0xB0); //进入自动写 while(i--) { CheckAutoWrite(); LcmWriteData( FillByte ); } LcmWriteCommand(0xB2); //退出自动写 } 精选文档 . //设定显示地址函数 void LocateXY(Uchar x,Uchar y,Uchar mode) { Uint temp; temp= LcmXPixel/8*y + x; if(mode) //mode=1为Graphic { //如果图形模式要加上图形区首地址0x0800 temp+=0x0800; } LcmWriteCommandWith2Par(temp&0xff,temp/256,0x24); } //显示一个ASCII码函数 void PutChar(Uchar x,Uchar y,Uchar CharByte) { LocateXY(x,y,TXT); LcmWriteCommandWith1Par(CharByte-0x20,0xC4); //内部带的英文字库是从0x00开始,也就是说空格0x20的字库值是0x00,所以-0x20 } //显示一个字符串函数 void PutString(Uchar x,Uchar y,Uchar *str) { while(*str != 0) { if(x> (LcmXPixel/8-1)) //自动换行 { x=0; y++; } PutChar(x,y,*str); ++x; ++str; } } //显示一副图片函数 void PutBmp(Uchar *puts) { Uchar i,j; Uint X=0; LocateXY(0,0,Graphic); LcmWriteCommand(0xB0); //进入自动写 for(i=0;i<LcmYPixel;i++) 精选文档 . { for(j=0;j<LcmXPixel/8;j++) { CheckAutoWrite(); LcmWriteData(puts[X]); X++; } } LcmWriteCommand(0xB2); //退出自动写 } //反显一副图片函数 void ReverseOneBmp( void ) { //利用数据一次读写操作 Uchar i,j,X; //只能对一段RAM取反 LocateXY(0,0,Graphic); for(i=0;i<LcmYPixel;i++) { for(j=0;j<LcmXPixel/8;j++) { LcmWriteCommand(0xC5); //读数据,地址不变 CheckRWCD(); X = LcmReadData(); X = ~X; LcmWriteCommandWith1Par(X,0xC0); } } } //屏读功能演示 void ScreenReadDemo( void ) { //利用屏读 //能对当前屏幕反显,包括合成内容(本函数仅读文本到图形) //但是写入后的内容都在图形区 //可以将文本区内容读出以图形方式写到图形区 Uchar i,j,X; //使用屏读屏考时候必须设置宽度为40(硬件已决定) //所以如确定要用到屏读屏考的话最后初始化时就设40 LcmWriteCommandWith2Par(0x28,0x00,0x41); //设置文本显示区宽度=40 LcmWriteCommandWith2Par(0x28,0x00,0x43); //设置图形显示区宽度=40 PutString(0,0,str0); //0,0不会受到宽度改变的影响 for(i=0;i<8;i++) //屏读较慢,就以一行文本做演示 { 精选文档 . LcmWriteCommandWith2Par((0x28*i+0x800)&0xff,(0x28*i+0x800)/256,0x24); for(j=0;j<LcmXPixel/8;j++) { LcmWriteCommand(0xE0); CheckScreen(); CheckRWCD(); X = LcmReadData(); X = ~X; LcmWriteCommandWith1Par(X,0xC0); } } //屏读需要一点时间,运行速度比较慢,运行过程中由于文本图形互补的关系,屏幕全黑 LcmWriteCommand(0x98); //关闭文本区看显示效果,会在图形显示区显示一样的字符串 DelayKey(1,0); LcmWriteCommand(0x9C); //恢复文本区显示 LcmWriteCommandWith2Par(LcmXPixel/8,0x00,0x41); //宽度改回原值 LcmWriteCommandWith2Par(LcmXPixel/8,0x00,0x43); LcmClear(0); //清屏 } //显示点阵子函数 void PutDots(Uchar DotByte,Uchar n) { Uchar i,j; LocateXY(0,0,Graphic); LcmWriteCommand(0xB0); //进入自动写 for(i=0;i<LcmYPixel/n;i++) { for(j=0;j<LcmXPixel/8*n;j++) { CheckAutoWrite(); LcmWriteData(DotByte); } DotByte=~DotByte; } LcmWriteCommand(0xB2); //退出自动写 } //主函数 void main(void) { Uchar i; p0_dr=0;//坚鸿测试架增加指令,控制P0口输入输出 精选文档 . int_zhongduan(); FS = 0; RES = 0; DelayMS(100); RES = 1; DelayMS(20); LcmInit(); LcmClear(0); while(1) { PutBmp(bmp1); //显示一副图片 DelayKey(1,0); ReverseOneBmp(); //反显当前图片 DelayKey(1,0); LcmClear(0); //清屏,此处不清屏且同时打开文本和图形可观察文本xor图形的显示效果 LcmWriteCommand(0x94); //仅开文本,关图形,这种情况下有可能英文字库出现错误 for(i=0;i<(LcmYPixel/8);i++) //显示一屏字符串 PutString(0,i,str0); DelayKey(0,5); LcmWriteCommand(0x9C); //开文本图形 DelayKey(0,5); LcmClear(0); LcmClear(0xff); //全黑检测 DelayKey(1,0); ScreenReadDemo(); //屏读演示,函数内包含了延时 PutDots(0x55,1); DelayKey(1,0); PutDots(0xaa,1); DelayKey(1,0); PutDots(0x33,2); DelayKey(1,0); PutDots(0xcc,2); DelayKey(1,0); PutDots(0xF0,4); DelayKey(1,0); PutDots(0x0F,4); DelayKey(1,0); } } 精选文档 . //代码区 Uchar code str0[]="ShenZhen SunSon Electronic INC"; //减去0x20即可 Uchar code bmp1[]={ //********************************************************// //***** 转换的文件:D:\!Program\!Bmp_Sample\240128.bmp //***** 源图形宽度 * 高度:240 * 128 //***** 调整后宽度 * 高度:240 * 128 //***** 字模格式:横向取模,冗余模式,字节正序,正色取模, //***** 点阵转换时间:2009/07/25 10:40:22 //***** 位图点阵占用3840字节 //********************************************************// 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x07,0xFF, 0xFF,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xC0, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xE0,0x00,0xF0, 0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x01,0x80,0x00,0x00,0x00,0x0F,0xFF,0xFF,0xFC,0x01,0xFC,0x00,0x00, 0x03,0xF8,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0F,0x00,0x00,0x00,0x1F, 0x00,0x01,0x80,0x00,0x00,0x00,0x0F,0x9F,0xFF,0xFE,0x01,0x8F,0x0F,0xFE,0x0F,0x18, 0x00,0x7F,0xE0,0x00,0x00,0x00,0x38,0x00,0x00,0x19,0x80,0x00,0x00,0x7F,0xE0,0x01, 0x80,0x00,0x00,0x00,0x0F,0x1F,0xFC,0x7F,0x01,0x83,0x7F,0xFF,0xDC,0x18,0x01,0xFF, 0xF0,0x00,0x00,0x00,0x7C,0x00,0x00,0x30,0xC0,0x00,0x00,0xE0,0xF0,0x01,0x80,0x00, 0x00,0x00,0x1F,0x00,0x08,0x3F,0x01,0x81,0xFF,0xFF,0xF8,0x18,0x03,0x07,0x18,0x00, 0x00,0x00,0xCE,0x00,0x00,0x64,0xC0,0x00,0x01,0xC0,0x3C,0x01,0x80,0x00,0x00,0x00, 0x7F,0x00,0x00,0x3F,0x01,0x81,0xFF,0xFF,0xF8,0x18,0x0C,0x00,0x8C,0x00,0x00,0x01, 0x87,0x00,0x00,0xCE,0x60,0x00,0x01,0x80,0x0E,0x01,0x80,0x00,0x00,0x00,0x7F,0x86, 0x30,0x7F,0x01,0x83,0xFF,0xFF,0xFC,0x18,0x1F,0xFE,0x4C,0x00,0x00,0x03,0x33,0x80, 0x01,0x9E,0x60,0x00,0x01,0x80,0x07,0x01,0x80,0x00,0x00,0x00,0xFF,0x86,0x30,0xFF, 0x80,0xC7,0xFF,0xFF,0xFE,0x18,0x1E,0x57,0x26,0x00,0x00,0x06,0x39,0xC0,0x01,0x9F, 0x71,0xC0,0x01,0x80,0x03,0x01,0x80,0x00,0x00,0x00,0xFF,0x80,0x01,0xFF,0xC0,0xCF, 0xFF,0xFF,0xFE,0x30,0x24,0xA4,0xC2,0x00,0x00,0x04,0x78,0xE0,0x03,0x3F,0x37,0xF0, 0x01,0xC0,0x01,0x81,0x80,0x00,0x00,0x07,0xFF,0x80,0x01,0xFF,0xC0,0x6F,0xFF,0xFF, 0xFF,0x30,0x49,0x24,0x62,0x00,0x00,0x04,0xFC,0xFF,0xFF,0x3F,0x3C,0x38,0x00,0xC0, 0x01,0x81,0x80,0x00,0x00,0x18,0xFF,0x80,0x01,0xFF,0xC0,0x7F,0xFF,0xFF,0xFF,0xE0, 0x49,0x24,0x23,0x00,0x00,0x0C,0xFC,0x7F,0xFE,0x3F,0x10,0x1C,0x00,0xE0,0x01,0x81, 精选文档 . 0x80,0x00,0x00,0x60,0x7F,0x80,0x01,0xFF,0xC0,0x3F,0xFF,0xFF,0xFF,0xE0,0x49,0x24, 0x13,0x00,0x00,0x08,0xFC,0x3F,0xFC,0x3F,0x10,0x0C,0x00,0x70,0x01,0x81,0x80,0x00, 0x00,0x80,0x7F,0x00,0x00,0xFF,0x80,0x3F,0xFF,0xFF,0xFF,0xC0,0x49,0xB6,0x93,0x00, 0x00,0x08,0xFC,0x00,0x00,0x00,0x1F,0x84,0x00,0x30,0x07,0x81,0x80,0x00,0x01,0x00, 0xFE,0x01,0xC0,0x7F,0x00,0x7F,0xFF,0xFF,0xFF,0xC0,0x6B,0xFF,0xD9,0x00,0x00,0x10, 0x00,0x20,0x02,0x00,0x1E,0xB6,0x00,0x00,0x07,0x81,0x80,0x00,0x01,0x00,0xFC,0x02, 0x60,0x3F,0x80,0x7F,0xFF,0xFF,0xFF,0xE0,0x1F,0xE7,0xF9,0x00,0x00,0x18,0x00,0x90, 0x04,0x80,0x1A,0xA6,0x00,0x00,0x00,0x01,0x80,0x00,0x01,0x01,0xFC,0x03,0xE0,0x3F, 0xC0,0x7F,0xFF,0xFF,0xFF,0xE0,0x07,0xE7,0xF9,0x00,0x00,0x18,0x1F,0x40,0x01,0x7C, 0x1A,0xA4,0x01,0xC0,0x00,0x01,0x80,0x00,0x01,0x01,0xFC,0x00,0x00,0x1F,0xC0,0x7E, 0x07,0xFE,0x0F,0xE0,0x06,0xE3,0x7B,0x00,0x00,0x30,0x00,0x80,0x00,0x80,0x1A,0x84, 0x01,0xF8,0x00,0x01,0x80,0x00,0x02,0x01,0xFC,0x00,0x00,0x1F,0xC0,0x7C,0x03,0xFC, 0x07,0xE0,0x07,0x45,0x3B,0x00,0x00,0x30,0x0F,0x00,0x00,0x78,0x08,0x0C,0x00,0xFC, 0x00,0x01,0x80,0x00,0x02,0x01,0xFC,0x00,0x00,0x1F,0xC0,0x7C,0x13,0xFC,0x03,0xE0, 0x06,0xC3,0x3B,0x00,0x00,0x30,0x10,0x80,0x00,0x84,0x0C,0x0C,0x00,0x3F,0x80,0x01, 0x80,0x00,0x02,0x00,0xFC,0x00,0x00,0x1F,0xC0,0x7C,0x3B,0xF9,0x83,0xE0,0x06,0x00, 0x7B,0x00,0x00,0x70,0x26,0x40,0x01,0x32,0x0C,0x0C,0x00,0x0F,0xC0,0x01,0x80,0x00, 0x02,0x00,0x7E,0x00,0x00,0x3F,0x81,0xFC,0x3B,0xFB,0xC3,0xE0,0x03,0x28,0xFB,0x00, 0x00,0x60,0x2F,0x40,0x01,0x7A,0x04,0x04,0x00,0x0F,0xF0,0x01,0x80,0x3E,0x04,0x00, 0x7F,0x00,0x00,0x7F,0x80,0x7C,0x13,0xFD,0x83,0xFF,0x01,0x91,0xFF,0x00,0x00,0x60, 0x26,0x40,0x01,0x32,0x06,0x04,0x00,0x06,0xFC,0x01,0x80,0x3F,0x00,0x00,0x7F,0x80, 0x00,0xFF,0x82,0x3E,0x07,0xFC,0x07,0xC0,0x01,0xC7,0xFF,0x00,0x00,0x60,0x10,0x80, 0x00,0x84,0x06,0x06,0x00,0x06,0x3F,0x01,0x80,0x7F,0x0F,0x00,0x3F,0xC0,0x01,0xFF, 0x80,0x3F,0x0F,0x9E,0x0F,0xC0,0x01,0x3E,0x7F,0x00,0x00,0x60,0x0F,0x00,0x00,0x78, 0x06,0x06,0x00,0x06,0x0F,0x81,0x80,0x7F,0x09,0x01,0x1F,0xE0,0x03,0xFF,0x00,0x1F, 0xFF,0x0F,0xFF,0x80,0x02,0x24,0x3F,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x06,0x06, 0x00,0x06,0x7F,0x01,0x80,0x7F,0x19,0x01,0x43,0xFF,0x9F,0xFF,0x00,0x3F,0xFF,0xFF, 0xFF,0x80,0x04,0x18,0x1F,0x00,0x00,0x60,0x00,0x00,0x00,0x00,0x26,0x02,0x00,0x07, 0xF0,0x01,0x80,0x7F,0x31,0x02,0x47,0xFF,0xFF,0xFE,0x00,0xE7,0xFF,0xFF,0xFF,0xC0, 0x05,0x00,0x0F,0x00,0x00,0x72,0x00,0x00,0x80,0x3F,0xC6,0x07,0x00,0x7F,0x00,0x01, 0x80,0x3E,0x28,0x02,0x43,0xFF,0xFF,0xF0,0x01,0x83,0xFF,0xFF,0xFE,0x30,0x07,0x00, 0x1D,0x00,0x00,0x71,0xFF,0x81,0xF0,0x40,0x06,0x4F,0x01,0xF8,0x00,0x01,0x80,0x01, 0xF1,0x04,0x41,0xFF,0xFF,0xF0,0x00,0x00,0xFF,0xFF,0x
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服