www.pudn.com > LCDseries.rar > LCD.CPP
//--------------------------------------------------------------------------- //此中包含液晶操作的全部子程序,另外还包括优盘检测的子程序 #pragma hdrstop #define LCDEnableNum 20 #include#include #include "Lcd.h" #include "system.hpp" #include "param.h" //此中包含所有应用的汉字以及其他字符的字模 //------------------------------------------------------ WideString HanziNum =" 系ab统12"; //上处定义全部汉字 //--------------------------------------------------------------------------- //************变量定义结束 ****************************************** //****************************************************** //************函数定义开始************************************** //----------------------------------------------------------- int LcdDisplay(AnsiString StrHanzi) { int i,j; int DestiArray[LCDEnableNum]; WideString SourceStr=StrHanzi; wchar_t SourceChar; for(i=1;i<=LCDEnableNum;i++) // 字符串第一个字符是'\0',因此从1开始 { if(i>SourceStr.Length()) { DestiArray[i-1]=0; //如果不足20个字符,自动补足 continue; } SourceChar=SourceStr[i]; // 待处理字符 for(j=1;j<=HanziNum.Length();j++) { if(SourceChar==HanziNum[j]) { DestiArray[i-1]=j-1; break; } DestiArray[i-1]=0; } } LcdDisplay(DestiArray); //调用显示数组程序 return 0; } // end of LCDDisplay(AnsiString); //----------------------------------------------------- int LcdDisplay(int *NumHanzi) { int row=0,pag=0; int dataport=0x378; int comport=0x37a; int c; int number=0; /*脉冲的顺序是:先选通和片选,然后可读或者可写,之后才能写数据*/ /*命令数据选通与打印机初始化接口相连 ,片选与打印机选通接口相连*/ /*==========程序初始化============*/ //初始化左片 /*====显示初始行设置====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,0xc0); outportb(dataport,0xc0); outportb(dataport,0xc0); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====显示列序设置====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,0xa0); outportb(dataport,0xa0); outportb(dataport,0xa0); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====显示模式设置====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,0xa4); outportb(dataport,0xa4); outportb(dataport,0xa4); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====显示占空比设置====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,0xa9); outportb(dataport,0xa9); outportb(dataport,0xa9); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ //delay(10); /*====开显示====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ //初始化右片 /*====显示初始行设置====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,0xc0); outportb(dataport,0xc0); outportb(dataport,0xc0); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====显示列序设置====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,0xa0); outportb(dataport,0xa0); outportb(dataport,0xa0); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====显示模式设置====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,0xa4); outportb(dataport,0xa4); outportb(dataport,0xa4); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====显示占空比设置====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,0xa9); outportb(dataport,0xa9); outportb(dataport,0xa9); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====开显示====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*========写数据的具体步骤========*/ /*====写特殊字符====*/ //每次只写一个字 for (number=0;number<5;number++) { c=NumHanzi[number]*32; for (pag=0;pag<2;pag++) { for (row=16*number;row<16*(number+1);row++) { /*====写页指针====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,row); outportb(dataport,row); outportb(dataport,row); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====写列指针====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====写数据====*/ outportb(comport,0x16);/*A=1,CS1=0,CS2=1,R=0,W=1::读数据,片1选中*/ outportb(comport,0x17);/*A=1,CS1=0,CS2=1,R=1,W=0::写数据,片1选中*/ outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(comport,0x16);/*A=1,CS1=0,CS2=1,R=0,W=1::读数据,片1选中*/ } c++ ; } } for (number=5;number<10;number++) { c=NumHanzi[number]*32; for (pag=0;pag<2;pag++) { for (row=16*(number-5);row<16*(number-4);row++) { /*====写页指针====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,row); outportb(dataport,row); outportb(dataport,row); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====写列指针====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====写数据====*/ outportb(comport,0x14);/*A=1,CS1=1,CS2=0,R=0.W=1::读数据,片2选中*/ outportb(comport,0x15);/*A=1,CS1=1,CS2=0,R=1.W=0::写数据,片2选中*/ outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(comport,0x14);/*A=1,CS1=1,CS2=0,R=0.W=1::读数据,片2选中*/ } c++ ; } } for (number=10;number<15;number++) { c=NumHanzi[number]*32; for (pag=2;pag<4;pag++) { for (row=16*(number-10);row<16*(number-9);row++) { /*====写页指针====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,row); outportb(dataport,row); outportb(dataport,row); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====写列指针====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====写数据====*/ outportb(comport,0x16);/*A=1,CS1=0,CS2=1,R=0,W=1::读数据,片1选中*/ outportb(comport,0x17);/*A=1,CS1=0,CS2=1,R=1,W=0::写数据,片1选中*/ outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(comport,0x16);/*A=1,CS1=0,CS2=1,R=0,W=1::读数据,片1选中*/ } c++; } } for (number=15;number<20;number++) { c=NumHanzi[number]*32; for (pag=2;pag<4;pag++) { for (row=16*(number-15);row<16*(number-14);row++) { /*====写页指针====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,row); outportb(dataport,row); outportb(dataport,row); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====写列指针====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(dataport,pag+184); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ /*====写数据====*/ outportb(comport,0x14);/*A=1,CS1=1,CS2=0,R=0.W=1::读数据,片2选中*/ outportb(comport,0x15);/*A=1,CS1=1,CS2=0,R=1.W=0::写数据,片2选中*/ outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(dataport,a[c]); outportb(comport,0x14);/*A=1,CS1=1,CS2=0,R=0.W=1::读数据,片2选中*/ } c++; } } /*====开显示====*/ outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ outportb(comport,0x13);/*A=0,CS1=0,CS2=1,R=1,W=0::写命令,片1选中*/ outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(comport,0x12);/*A=0,CS1=0,CS2=1,R=0,W=1::读状态,片1选中*/ /*====开显示====*/ outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ outportb(comport,0x11);/*A=0,CS1=1,CS2=0,R=1.W=0::写命令,片2选中*/ outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(dataport,0xaf); outportb(comport,0x10);/*A=0,CS1=1,CS2=0,R=0.W=1::读状态,片2选中*/ return 0; } // end of LcdDisplay(int *) //------------------------------------------------------ //------------------------------------------------------ int LcdPlot(int *d) { return 0; } //end of int LcdPlot(int *d) //------------------------------------------------------ //------------------------------------------------------ void outportb(int port, char data) { switch(port) { case 0x378: asm{ mov al,data mov dx,0x378 out dx,al } break; case 0x37a: asm{ mov al,data mov dx,0x37a out dx,al } break; default: break; } return; } // end of outportb(int port, char data) //------------------------------------------------------ //------------------------------------------------------ int checkdisk(int ndisk)//USB检测程序 { int save, disk; disk=ndisk; setdisk(disk); if (disk == getdisk()) { printf("%c: drive is available\n", disk + 'a'); return 1; } else { printf("%c: drive is not available\n", disk + 'a'); return 0; } } // end of checkdisk(int ndisk) //------------------------------------------------------ //********************函数定义结束********************************* #pragma package(smart_init)