又将程序修改了一遍,还不行。
我将程序贴上来:#include <reg51.h>
#include <intrins.h>
#define uchar unsigned char
#define uint unsigned int
/*12864端口定义*/
#define LCD_data P1 //数据口
sbit LCD_RS = P3^5; //寄存器选择输入
sbit LCD_RW = P3^6; //液晶读/写控制
sbit LCD_EN = P3^7; //液晶使能控制
//sbit LCD_PSB = P3^7; //串/并方式控制
sbit dscs=P2^4;
sbit dsas=P2^5;
sbit dsrw=P2^6;
sbit dsds=P2^7;
uchar code dis1[] = {" 东滩矿欢迎您 "};
uchar code dis2[] = {"2010年09月09日 "};
uchar code dis3[] = {" :: :: "};
//uchar code dis4[] = {"星期四 温度:20 C"};
uchar aa,shi,fen,miao,shi1,shi2,ge1,ge2;
bit flag=0;
#define delayNOP(); {_nop_();_nop_();_nop_();_nop_();};
void set_time();
uchar read_ds(uchar );
void write_ds(uchar ,uchar );
void lcd_pos(uchar X,uchar Y); //确定显示位置
/*******************************************************************/
/* */
/* 延时函数 */
/* */
/*******************************************************************/
void delay(int ms)
{
while(ms--)
{
uchar i;
for(i=0;i<250;i++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/*******************************************************************/
/* */
/*检查LCD忙状态 */
/*lcd_busy为1时,忙,等待。lcd-busy为0时,闲,可写指令与数据。 */
/* */
/*******************************************************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayNOP();
result = (bit)(P1&0x80);
LCD_EN = 0;
return(result);
}
/*******************************************************************/
/* */
/*写指令数据到LCD */
/*RS=L,RW=L,E=高脉冲,D0-D7=指令码。 */
/* */
/*******************************************************************/
void lcd_wcmd(uchar cmd)
{
while(lcd_busy());
LCD_RS = 0;
LCD_RW = 0;
LCD_EN = 0;
_nop_();
_nop_();
P1 = cmd;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/*写显示数据到LCD */
/*RS=H,RW=L,E=高脉冲,D0-D7=数据。 */
/* */
/*******************************************************************/
void lcd_wdat(uchar dat)
{
while(lcd_busy());
LCD_RS = 1;
LCD_RW = 0;
LCD_EN = 0;
P1 = dat;
delayNOP();
LCD_EN = 1;
delayNOP();
LCD_EN = 0;
}
/*******************************************************************/
/* */
/* LCD初始化设定 */
/* */
/*******************************************************************/
void write_sfm(uchar add,uchar date)
{
uchar shi1,ge1;
shi1=date/10;
ge1=date%10;
lcd_wcmd(0x88+add);
lcd_wdat(0x30+shi1);
lcd_wdat(0x30+ge1);
}
/*******初始化12864液晶*********/
/*void Ini_Lcd()
{ uchar i;
// rd=0;
write_ds(0x0a,0x21);//打开振荡器;
write_ds(0x0b,0x75);
write_ds(0,00);
write_ds(2,4);
write_ds(4,14);
LCD_EN=0;
LCD_RW=0;
LCD_RS=0;
write_cmd(0x30); //基本指令集
delay(5);
write_cmd(0x02); // 地址归位
delay(5);
write_cmd(0x0c); //整体显示打开,游标关闭
delay(5);
// Write_Cmd(0x01); //清除显示
delay(5);
write_cmd(0x06); //游标右移
delay(5);
write_cmd(0x88); //设定显示的起始地址
write_cmd(0x88);
for(i = 0; i < 14; i++)
Write_Data(table[i]);
write_cmd(0x90);
for(i = 0; i < 10; i++)
Write_Data(table1[i]);
}*/
void lcd_init()
{
uchar i;
//LCD_PSB = 1; //并口方式
write_ds(0x0a,0x21);//打开振荡器;
write_ds(0x0b,0x75);
set_time(); //向ds12c887写数据
lcd_wcmd(0x02); //地址归位
delay(5);
lcd_wcmd(0x30); //基本指令操作
delay(5);
lcd_wcmd(0x0C); //显示开,关光标
delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(5);
lcd_wcmd(0x06); //游标右移
delay(5);
lcd_wcmd(0x80); //设定显示起始地址
delay(5);
lcd_wcmd(0x88);
for(i = 0; i < 10; i++)
lcd_wdat(dis3[i]);
/*lcd_wcmd(0x0C); //显示开,关光标
delay(5);
lcd_wcmd(0x01); //清除LCD的显示内容
delay(5);*/
}
|