首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

新手 盛群单片机驱动1602LCD

2012-04-28 
新手求救 盛群单片机驱动1602LCD1602检查过时没问题的,用51试过时可以的,将程序改过加到ht66f50再驱动1602

新手求救 盛群单片机驱动1602LCD
1602检查过时没问题的,用51试过时可以的,将程序改过加到ht66f50再驱动1602就驱动不起来了
编译是通过的,代码如下:
 #include<ht66f50.h> //包含头文件,这个嘛,就不用多说了~~ 

#define rs _pd0 //1602的数据/指令选择控制线 
#define rw _pd1 //1602的读写控制线 
#define en _pd2 //1602的使能控制线 

const unsigned char table[]={"LCD1602 check ok"}; //要显示的内容1放入数组tablel 
const unsigned char table1[]={"study up"}; //要显示的内容2放入数组table1 
void delay(unsigned int n) //延时函数  

  unsigned int x,y; 
  for(x=n;x>0;x--) 
  for(y=110;y>0;y--); 

void lcd_wcom(unsigned char com) //1602写命令函数  

  rs=0; //选择指令寄存器 
  rw=0; //选择写 
  _pa=com; //把命令字送入P2 
  delay(5); 
  //延时一小会儿,让1602准备接收数据 
  en=1; //使能线电平变化,命令送入1602的8位数据口 
  en=0; 

void lcd_wdat(unsigned char dat) //1602写数据函数  

  rs=1; //选择数据寄存器 
  rw=0; //选择写 
  _pa=dat; //把要显示的数据送入pa
  delay(5);  
  //延时一小会儿,让1602准备接收数据 
  en=1; //使能线电平变化,数据送入1602的8位数据口 
  en=0; 

void lcd_init() //1602初始化函数  

  lcd_wcom(0x38); //8位数据,双列,5*7字形  
  lcd_wcom(0x0c); //开启显示屏,关光标,光标不闪烁 
  lcd_wcom(0x06); //显示地址递增,即写一个数据后,显示位置右移一位 
  lcd_wcom(0x01); //清屏 

void main() //主函数 
{ unsigned char n,m=0;
  unsigned char i,j;
_acerl = 0;//去除PA0管脚的AN0(A/D)功能

_tmpc0 = 0;//去除PA0管脚的TP0_0(TM0输入/输出)功能
_tmpc1 = 0;
_cp0c = 0;//去除PA0管脚的COX(比较器)功能
_cp1c = 0;
_pac = 0;//PA0设置为输出
  _pdc = 0;
_papu = 0xff;//PA0设置为上拉
  _pdpu = 0xff;
_pa = 0x00;
  _pd = 0;
   
   
  while(1)
  {lcd_init(); //液晶初始化 
  lcd_wcom(0x80); //显示地址设为80H(即00H,)上排第一位  
  for(m=0;m<16;m++) //将table[]中的数据依次写入1602显示 
  { 
  lcd_wdat(table[m]);  
  delay(200); 
   
  } 
  lcd_wcom(0x80+0x44); //重新设定显示地址为0xc4,即下排第5位 
  for(n=0;n<8;n++) //将table1[]中的数据依次写入1602显示 
  {  
  lcd_wdat(table1[n]); 
  delay(200); 
   
   
  } 
  }
   



[解决办法]
示波器,逻辑分析仪检查波形
[解决办法]
你这是在做仿真吗?如果是仿真就不多说了 
如果是硬件 其他问题很多的 比如对比度没有调节好,
程序大致看了一遍也没有看出有啥不对的
不过你的那个液晶初始化应该放到while(1)以前;
初始化以后就不用再反复初始化化了

热点排行