No.55346 作者:guest 邮件:guest@guest.com ID:6 登陆:16560次 文章数:7648篇 最后登陆IP:219.68.9.43 最后登陆:2005/5/20 1:37:44 注册:2003/3/10 16:21:00 财富:35062 发帖时间:2004/5/26 8:59:25 发贴者IP:202.117.14.49 标题:guest:想请高手看看我的液晶程序是什么问题?总是不显示 摘要:No.55346想请高手看看我的液晶程序是什么问题?总是不显示 //*********************************************************** //连线图:LCM-89C51 DB0-P0.0 DB1-P0.1 DB2-P0.2 // DB3-P0.3 DB4-P0.4 DB5-P0.5 DB6-P0.6 // DB7-P0.7 A0-P2.7 CS1-P2.6 CS2-P2.5 CL-P2.4 // RES-P2.3 //程序是2*16字符显示 //*********************************************************** / #include <reg51.h> #include <stdio.h> #include <absacc.h> #define LCDCOM1 XBYTE[0x2600]//lcd命令寄存器地址A0=0,CS1=0,CS2=1,CL=0,RES=0,P2.2=1; #define LCDCOM2 XBYTE[0x4600]//lcd命令寄存器地址A0=0,CS1=1,CS2=0,CL=0,RES=0,P2.2=1; #define LCDDAT1 XBYTE[0xA600]//LCD数据寄存器地址A0=1,CS1=0,CS2=1,CL=0,RES=0,P2.2=1 #define LCDDAT2 XBYTE[0xC600]//LCD数据寄存器地址A0=1,CS1=1,CS2=0,CL=0,RES=0,P2.2=1; /* #define LCDREAD1 XBYTE[0x4000] //读取数据A0=0,CS1=1,CS2=0,CL=0,RES=0 #define LCDREAD2 XBYTE[0x2000] //读取数据A0=0,CS1=0,CS2=1,CL=0,RES=0 */ sbit busy_flag=ACC^7; sbit lcd_reset=P2^3; // sbit lcd_read=P3^7; // sbit lcd_write=P3^6; sbit lcd_cl=P2^4; typedef unsigned char uchar; // typedef unsigned int uint; uchar code lcd_line1[16]={0x20,0x20,0x20,0x20,0x20,0x20,0xA0,0x7F,0xA0,0x20,0x20,0x20,0x20,0x20,0x20,0x00}; //"大"字上半边 uchar code lcd_line2[16]={0x00,0x80,0x40,0x20,0x10,0x0C,0x03,0x00,0x01,0x06,0x08,0x30,0x60,0xC0,0x40,0x00}; //"大"字下半边 //延时1*d ms void delay(unsigned int d) {uchar j; while(d--){ for(j=0;j <125;j++){;} } } //复位 void reset(void) { lcd_reset=0; delay(5); lcd_reset=1; delay(5); lcd_reset=0; } //时钟产生 void clock(void) interrupt 1 { lcd_cl=!lcd_cl; } //time0 产生中断 //测试lcd1边忙 void wait_lcd1(void) {do {//lcd_read=0; ACC=LCDDAT1;} while(busy_flag==1); } //测试lcd2边忙 void wait_lcd2(void) {do {//lcd_read=0; ACC=LCDDAT2;} while(busy_flag==1); } //送lcd1边命令字 void I_SEND1(uchar y) {wait_lcd1(); // lcd_read=1;lcd_write=0; LCDCOM1=y; } //送lcd2边命令字 void I_SEND2(uchar y) {wait_lcd2(); // lcd_read=1;lcd_write=0; LCDCOM2=y; } //送lcd1边数据 void D_SEND1(uchar x) {wait_lcd1(); // lcd_read=1;lcd_write=0; LCDDAT1=x; } //送lcd2边数据 void D_SEND2(uchar x) {wait_lcd2(); // lcd_read=1;lcd_write=0; LCDDAT2=x; } //lcd1边初始化 void start_lcd1() { delay(5); //等待2ms的时间或更长时间,使电压稳定 I_SEND1(0XE2); //soft reset I_SEND1(0xAE); //关显示 I_SEND1(0xc0); //start line I_SEND1(0xA4); //清除显示 static drive off I_SEND1(0X ......
>>返回讨论的主题
|