LCD驱动芯片1335控制器C51源程

整理硬盘资料,看见的一段代码。贴上来备份

//LCD驱动芯片1335控制器C51源程 // /*include files */ #include "w78e58.h" //#include "zimo.h" //这是自己做的一个汉字库, #include "stdio.h" #include "stdlib.h" #include "math.h" #include "absacc.h" #include "intrins.h" #include "string.h" /*define function*/ #define HIBYTE(V1) ((BYTE)((V1)>>8)) #define LOBYTE(V1) ((BYTE)((V1)&0Xff)) #define MAKEWORD(V1,V2) ((((WORD)(V1))<<8)+(WORD)(V2)) /*define SED1335 port address*/ #define SEDWRCOM XBYTE[0X1100] //写指令代码 #define SEDRDCSR XBYTE[0X1100] //读光标指针 #define SEDWRDAT XBYTE[0X1000] // 写指令参数和显示数据 /*define LCD code */ #define SYSSET 0x40 #define SCROLL 0x44 #define SLEEP 0x53 #define DISPON 0x59 #define DISPOFF 0x58 #define OVLAY 0x5b #define HDOTSCR 0x5a #define CSRFORM 0x5d #define CGRAMADR 0x5c #define CSRRGT 0x4c #define CSRLFT 0x4d #define CSRUP 0x4e #define CSRDOWN 0x4f #define CSRW 0x46 #define CSRR 0x47 #define MWRITE 0x42 #define MREAD 0x43 #define AP 30 /*define screen flag*/ BOOL FG_FIRST = 0; BOOL FG_MAIN = 0; BOOL FG_PWD = 0; BOOL FG_PRG = 0; BOOL FG_PRG1 = 0; BOOL FG_PRG2 = 0; BOOL FG_PRG3 = 0; BOOL FG_CYCLE = 0; BOOL FG_LIMIT = 0; BOOL FG_TIME = 0; BOOL FG_INPUT = 0; BOOL FG_OUTPUT = 0; BOOL FG_PID = 0; BOOL FG_SELFCTL = 0; BOOL FG_VARY = 0; /*LCD initial parameters*/ BYTE code SYSTAB[8] = {0x30, 0x87, 0x0f, 0x1d, 0x4c, 0xa0, 0x1e, 0x00}; BYTE code SCRTAB[10] = {0x00, 0x00, 0xa0, 0x00, 0x40, 0xa0, 0x00, 0x80, 0x00, 0x00}; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*START OF THE PROGRAME*/ /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ /*SBUROUTINES OF LCD DRIVE*/ void WLCDCOM (BYTE com ) //写LCD控制命令 { SEDWRCOM = com; _nop_(); } void WLCDDATA (BYTE ref ) //写LCD控制参数和显示字符数据 { SEDWRDAT = ref; _nop_(); } void CLRVRAM (void) //显示存储器清零 { WORD i, j; WLCDCOM (CSRRGT); WLCDCOM (CSRW); WLCDDATA (0x00); WLCDDATA (0x00); WLCDCOM (MWRITE); for (i = 0; i <= 0xff; i++) { for (j = 0; j <= 0xff; j++) { WLCDDATA (0x00); } } } void CLRSCREEN (void) //清除显示屏幕 { WORD i, j; WLCDCOM (CSRRGT); WLCDCOM (CSRW); WLCDDATA (0X00); WLCDDATA (0X00); WLCDCOM (MWRITE); for (i = 0; i < 0xa0; i++) { for (j = 0; j { WLCDDATA (0x00); } } } void WNUMBER (BYTE x, BYTE y, BYTE (*p) [16], BYTE num ) //功能:显示0~9等10个数字,num为要显示的数字的值(16×8) //x坐标寄存器(字节),y坐标寄存器(点行) { WORD temp; BYTE hi, lo; BYTE a, b, c; temp = y * AP; hi = HIBYTE (temp); lo = LOBYTE (temp); lo = x + lo; if (CY == 1) {hi += 0x01; CY = 0;} WLCDCOM (CSRDOWN); WLCDCOM (CSRW); WLCDDATA (lo); WLCDDATA (hi); WLCDCOM (MWRITE); for (c = 0; c < 16; c++) { WLCDDATA (* (* (p + num) + c) ); } lo = lo + 0x01; if (CY == 1) {hi += 0x01; CY = 0;} } void WBLOCK (BYTE x, BYTE y, BYTE (*p) [16], BYTE num ) //功能:显示16×8点字符,num为要显示的字符块长度 //x坐标为低8位寄存器(字节),y坐标寄存器(点行) { WORD temp; BYTE hi, lo; BYTE a, b, c; temp = y * AP; hi = HIBYTE (temp); lo = LOBYTE (temp); lo = x + lo; if (CY == 1) {hi += 0x01; CY = 0;} WLCDCOM (CSRDOWN); WLCDCOM (CSRW); WLCDDATA (lo); WLCDDATA (hi); WLCDCOM (MWRITE); for (c = 0; c < 16; c++) { WLCDDATA (* (* (p + num - 1) + c) ); } lo = lo + 0x01; if (CY == 1) {hi += 0x01; CY = 0;} } void FILLBLOCK (BYTE x, BYTE y, BYTE len ) //功能:显示16×16字符,len为要显示的字符块的长度 //x坐标为低8位寄存器(字节),y坐标寄存器(点行) { WORD temp; BYTE hi, lo; BYTE a, b; temp = y * AP; hi = HIBYTE (temp); lo = LOBYTE (temp); lo = x + lo; if (CY == 1) {hi += 0x01; CY = 0;} for (b = 0; b { WLCDCOM (CSRDOWN); WLCDCOM (CSRW); WLCDDATA (lo); WLCDDATA (hi); WLCDCOM (MWRITE); for (a = 0; a < 16; a++) { WLCDDATA (0xff); } lo = lo + 0x01; if (CY == 1) {hi += 0x01; CY = 0;} } } void CLRBLOCK (BYTE x, BYTE y, BYTE len ) //清除16×8字符快,len为要清除的字符块的长度 //x坐标寄存器(字节),y坐标寄存器(点行) { WORD temp; BYTE hi, lo; BYTE a, b; temp = y * AP; hi = HIBYTE (temp); lo = LOBYTE (temp); lo = x + lo; if (CY == 1) {hi += 0x01; CY = 0;} for (b = 0; b { WLCDCOM (CSRDOWN); WLCDCOM (CSRW); WLCDDATA (lo); WLCDDATA (hi); WLCDCOM (MWRITE); for (a = 0; a < 16; a++) { WLCDDATA (0x00); } lo = lo + 0x01; if (CY == 1) {hi += 0x01; CY = 0;} } } void WLCDCHR (BYTE x, BYTE y, BYTE (*p) [32], BYTE num ) //功能:显示16×32字符,num为要显示字符数组的第一维的值 //x坐标寄存器(字节),y坐标寄存器(点行) { WORD temp; BYTE hi, lo; BYTE a, b, c; temp = y * AP; hi = HIBYTE (temp); lo = LOBYTE (temp); lo = x + lo; if (CY == 1) {hi += 0x01; CY = 0;} WLCDCOM (CSRDOWN); for (a = 0; a { WLCDCOM (CSRW); WLCDDATA (lo); WLCDDATA (hi); WLCDCOM (MWRITE); for (c = 0; c < 0x20; c += 2) { WLCDDATA (* (* (p + a) + c) ); } lo = lo + 0x01; if (CY == 1) {hi += 0x01; CY = 0;} WLCDCOM (CSRW); WLCDDATA (lo); WLCDDATA (hi); WLCDCOM (MWRITE); for (c = 1; c < 0x20; c += 2) { WLCDDATA (* (* (p + a) + c) ); } lo = lo + 0x01; if (CY == 1) {hi += 0x01; CY = 0;} } } void INITLCD (void) //初始化LCD显示参数以及界面 { WORD a, b, c; WLCDCOM (SYSSET); for (b = 0; b < 8; b++) { WLCDDATA (SYSTAB[b]); } WLCDCOM (SCROLL); for (b = 0; b < 10; b++) { WLCDDATA (SCRTAB[b]); } WLCDCOM (HDOTSCR); WLCDDATA (0X00); WLCDCOM (OVLAY); WLCDDATA (0X1c); WLCDCOM (DISPOFF); WLCDDATA (0X56); CLRVRAM(); WLCDCOM (CSRFORM); WLCDDATA (0X07); WLCDDATA (0X8f); WLCDCOM (DISPON); WLCDDATA (0X16); } /*DELAY SUBROUTINES*/ void DELAYX1MS (WORD count) //延时count毫秒 { BYTE i, j; for (i = 0; i for (j = 0; j < 120; j++) ; } void CLRFG (void) //清除标志位 { FG_FIRST = 0; FG_MAIN = 0; FG_PRG = 0; FG_PRG1 = 0; FG_PRG2 = 0; FG_PRG3 = 0; FG_CYCLE = 0; FG_LIMIT = 0; FG_TIME = 0; FG_INPUT = 0; FG_OUTPUT = 0; FG_PID = 0; FG_SELFCTL = 0; FG_VARY = 0; } /* void FLASH() { FILLBLOCK(7,0,2); DELAYX1MS(15); CLRBLOCK(7,0,2); DELAYX1MS(8); WNUMBER(7,0,C_NUM,1); WNUMBER(8,0,C_NUM,2); DELAYX1MS(15); } */ void DISPPWD (void) { // CLRFG(); CLRSCREEN(); WLCDCHR (2, 64, C_PASSWORD, 5); WBLOCK (12, 64, C_COLON, 1); FG_PWD = 1; } void DISPPRG (void) //编程的第一界面 { CLRFG(); CLRSCREEN(); WLCDCHR (0, 0, C_ROUT, 2); WBLOCK (4, 0, C_COLON, 1); WLCDCHR (1, 144, C_PROG, 2); WLCDCHR (9, 144, C_CANCEL, 2); WLCDCHR (17, 144, C_ENTER, 2); WLCDCHR (25, 144, C_MAIN, 2); FG_PRG = 1; } void DISPCYCLE (void) { CLRFG(); CLRSCREEN(); WLCDCHR (0, 16, C_CYCLE, 2); WLCDCHR (4, 16, C_STSEG, 2); WLCDCHR (10, 16, C_CYCLE, 2); WLCDCHR (14, 16, C_ENDSEG, 2); WLCDCHR (20, 16, C_CYCLE, 2); WLCDCHR (24, 16, C_TIMES, 2); WLCDCHR (9, 144, C_CANCEL, 2); WLCDCHR (17, 144, C_ENTER, 2); WLCDCHR (25, 144, C_MAIN, 2); FG_CYCLE = 1; } main() { BYTE i; INITLCD(); CLRSCREEN(); WNUMBER (6, 32, C_LETTER, 3); }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值