各位大虾好 小弟在做12864液晶显示字符表的时候遇到一个问题 就是最后一行的“while(1)”,如果不要,液晶显示字符,不停的刷新(初始化),但是加了while(1)之后,小弟认为应该停住啊,也就是一直显示字符 ,不会刷新了,但是下载程序之后,结果什么都不显示了。我就不知道什么原因了,各位大侠帮忙看看,谢谢。板子是郭天祥老师的TX-1C。
#include<reg52.h>
#include<intrins.h>
#include<stdlib.h>
#define uint unsigned int
#define ucha unsigned char
#define LCD_data P0 //数据口
sbit LCD_RS=P3^5; //寄存器选择输入
sbit LCD_RW=P3^6; //液晶读/写控制
sbit LCD_EN=P3^4; //液晶使能控制
sbit LCD_PSB=P3^7; //串/并方式控制
sbit wela=P2^6; //关闭数码管位选
sbit dula=P2^7; //关闭数码管段选
/******************************
//延时xms
******************************/
void delayms(uint x)
{
while(x--)
{
uint i;
for(i=150;i>0;i--)
{
_nop_();
_nop_();
}
}
}
/*********************************
//检查LCD是否忙
*********************************/
bit lcd_busy()
{
bit result;
LCD_RS = 0;
LCD_RW = 1;
LCD_EN = 1;
delayms(1);
result = (bit)(P0&0x80);
LCD_EN = 0;
return(result);
}
/**********************************
//写指令数据到LCD
//RS=L,RW=L,E=高脉冲,D0-D7=指令码
**********************************/
void write_cmd(ucha cmd)
{
while(lcd_busy());
LCD_RS=0;
LCD_RW=0;
LCD_EN=0;
P0=cmd;
delayms(1);
LCD_EN=1;
delayms(1);
LCD_EN=0;
}
/**********************************
//写显示数据到LCD
//RS=H,RW=L,E=高脉冲,D0-D7=数据
**********************************/
void write_dat(ucha dat)
{
while(lcd_busy());
LCD_RS=1;
LCD_RW=0;
LCD_EN=0;
P0=dat;
delayms(1);
LCD_EN=1;
delayms(1);
LCD_EN=0;
}
/*************************
//LCD初始化
*************************/
void init_lcd()
{
LCD_PSB=1; //并口方式
write_cmd(0x30); //基本指令操作
delayms(1);
write_cmd(0x20); //地址归位
delayms(1);
write_cmd(0x0c); //显示开,关光标
delayms(1);
write_cmd(0x01); //清除LCD显示内容
delayms(2);
write_cmd(0x06); //游标右移
delayms(1);
write_cmd(0x80); //设定显示起始位置
}
/************************
//主函数
************************/
void main()
{
ucha i;
wela=0;
dula=0;
delayms(1);
init_lcd();
write_cmd(0x80);
for(i=0;i<16;i++)
write_dat(0x00+i);
write_cmd(0x90);
for(i=0;i<16;i++)
write_dat(0x10+i);
write_cmd(0x88);
for(i=0;i<16;i++)
write_dat(0x20+i);
write_cmd(0x98);
for(i=0;i<16;i++)
write_dat(0x30+i);
while(1); //就是这个东东了
}
|