《结合PROTEUS仿真的12864液晶显示程序文档》由会员分享,可在线阅读,更多相关《结合PROTEUS仿真的12864液晶显示程序文档(15页珍藏版)》请在金锄头文库上搜索。
1、在proteus上用51单片机控制12864液晶显示2008-12-20 16:23 经过半天的努力,终于在PROTEUS上让液晶屏显出汉字了以下是源代码/*main.h*/#ifndef _MAIN_H#define _MAIN_H#include #define LcdDataPort P2 /数据端口#ifndef UCHAR_DEF#define UCHAR_DEFtypedef unsigned char uchar;#endifsbit Reset = P30; /复位sbit RS = P31; /指令数据选择sbit E = P32; /指令数据控制sbit CS1 = P34
2、; /左屏幕选择,低电平有效sbit CS2 = P35; /右屏幕选择sbit RW = P33; /读写控制sbit busy = P27; /忙标志void SetOnOff(uchar onoff);/开关显示void SelectScreen(uchar screen);/选择屏幕void ClearScreen(uchar screen);/清屏void Show1616(uchar lin,uchar colum,uchar *address);/显示一个汉字void CheckState(); /判断状态void LcdDelay(unsigned int time); /延时
3、void WriteData(uchar dat); /写数据void SendCommand(uchar command); /写指令void SetLine(uchar line); /置行地址void SetColum(uchar colum);/置列地址void SetStartLine(uchar startline);/置显示起始行void InitLcd(); /初始化void ResetLcd(); /复位#endif/*/*lcd.c*/#include main.hvoid CheckState()E = 1;RS = 0;RW = 1;LcdDataPort = 0xff
4、;while(!busy);void LcdDelay(unsigned int time)while(time -);void WriteData(uchar dat)CheckState();E = 1;RS = 1;RW = 0;LcdDataPort = dat;E = 0;void SendCommand(uchar command)CheckState();E = 1;RW = 0;RS = 0;LcdDataPort = command;E = 0;void SelectScreen(uchar screen)/0-全屏,1左屏,2-右屏switch(screen)case 0
5、:CS1 = 0;LcdDelay(2);CS2 = 1;LcdDelay(2);break;case 1 :CS1 = 1;LcdDelay(2);CS2 = 0;LcdDelay(2);break;case 2 :CS1 = 0;LcdDelay(2);CS2 = 0;LcdDelay(2);break;void ClearScreen(uchar screen) / screen 0-全屏,1左屏,2-右屏uchar i,j;SelectScreen(screen);for(i = 0;i 8;i +)SetLine(i);SetColum(0);for(j = 0;j 0 : 7lin
6、e = line & 0x07;line = line | 0xb8;/1011 1xxxSendCommand(line);void SetColum(uchar colum)/colum - 0 :63colum = colum & 0x3f;colum = colum | 0x40; /01xx xxxxSendCommand(colum);void SetStartLine(uchar startline) /startline - 0 : 63startline = startline & 0x3f;startline = startline | 0xc0;/11xxxxxxSend
7、Command(startline);void SetOnOff(uchar onoff) /1-开显示 0-关if(onoff = 1)SendCommand(0x3f); /0011 111xelseSendCommand(0x3e);void ResetLcd()Reset = 0;LcdDelay(2);Reset = 1;LcdDelay(2);RS0 = 0;LcdDelay(2);RS1 = 0;LcdDelay(2);SetOnOff(1);void InitLcd()ResetLcd();SetOnOff(0);ClearScreen(2);SetLine(0);SetCol
8、um(0);SetStartLine(0);SetOnOff(1);void Show1616(uchar lin,uchar colum,uchar *address)uchar i;SetLine(lin);SetColum(colum);for(i = 0;i 16;i +)WriteData(*(address +);SetLine(lin + 1);SetColum(colum);for(i = 0;i 16;i +)WriteData(*(address +);/*/*main.c*/#include #include main.hconst uchar code HZ_tab =
9、 0x10,0x21,0x62,0x06,0x82,0xE2,0x22,0x22, 0x22,0xF2,0x22,0x02,0xFE,0x03,0x02,0x00, /河 0x04,0x04,0xFE,0x01,0x00,0x0F,0x04,0x04, 0x04,0x0F,0x40,0x80,0x7F,0x00,0x00,0x00, 0x04,0xE4,0x24,0x24,0x64,0xA4,0x24,0x3F, 0x24,0xA4,0x64,0x24,0x24,0xF6,0x24,0x00, /南 0x00,0xFF,0x00,0x09,0x09,0x09,0x09,0x7F, 0x09,0
10、x09,0x09,0x49,0x80,0x7F,0x00,0x00, 0x24,0x24,0x24,0xA4,0xFE,0xA3,0x22,0x00, 0x24,0x48,0x00,0xFF,0x00,0x80,0x00,0x00, /科 0x10,0x08,0x06,0x01,0xFF,0x00,0x01,0x02, 0x02,0x02,0x02,0xFF,0x01,0x01,0x01,0x00, 0x10,0x10,0x10,0xFF,0x10,0x10,0x88,0x88, 0x88,0xFF,0x88,0x88,0x8C,0x08,0x00,0x00, /技 0x04,0x44,0x8
11、2,0x7F,0x01,0x80,0x81,0x46, 0x28,0x10,0x28,0x26,0x41,0xC0,0x40,0x00, 0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F, 0xA0,0x20,0x20,0x20,0x20,0x30,0x20,0x00, /大 0x00,0x40,0x40,0x20,0x10,0x0C,0x03,0x00, 0x01,0x06,0x08,0x10,0x20,0x60,0x20,0x00, 0x40,0x30,0x11,0x96,0x90,0x90,0x91,0x96, 0x90,0x90,0x98,0x14,0x1
12、3,0x50,0x30,0x00, /学 0x04,0x04,0x04,0x04,0x04,0x44,0x84,0x7E, 0x06,0x05,0x04,0x04,0x04,0x06,0x04,0x00, 0x00,0xF8,0x48,0x48,0x48,0x48,0xFF,0x48, 0x48,0x48,0x48,0xFC,0x08,0x00,0x00,0x00, /电 0x00,0x07,0x02,0x02,0x02,0x02,0x3F,0x42, 0x42,0x42,0x42,0x47,0x40,0x70,0x00,0x00, 0x80,0x80,0x82,0x82,0x82,0x82,0x82,0xE2, 0xA2,0x92,0x8A,0x86,0x80,0xC0,0x80,0x00, /子 0x00,0x00,0x00,0x00,0x00,0x40,0x80,0x7F, 0x00,0x00,0x00,