初级会员
- 积分
- 95
- 金钱
- 95
- 注册时间
- 2016-3-16
- 在线时间
- 30 小时
|
10金钱
请教大神,在使用STC8单片机控制1621B驱动液晶时,液晶不显示,程序及原理图如下
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit _DAT=P1^6; //HT1621数据引脚
sbit _CS=P1^0; //HT1621使能引脚
sbit _WR=P1^1; //HT1621时钟引脚
sbit _Vlcd=P1^7;//液晶/背光电源控制引脚,低电平有效
void delay_ms(uint z) //主时钟频率24MHz
{
uchar i=22, j=190;
_nop_();
_nop_();
_nop_();
while(z--)
{
do
{
while (--j);
} while (--i);
}
}
void WriteBitR(uchar dat,uchar m)
{
uchar i;
for (i=0;i<m;i++)
{
_WR=0;
_nop_();
_nop_();
_DAT=dat&0x80;
_nop_();
_nop_();
_WR=1;
_nop_();
_nop_();
dat<<=1;
}
}
void Write_cmd(uchar Cmd)
{
_CS=0;
_nop_();
_nop_();
WriteBitR(0x80,4); //写入命令标志100
WriteBitR(Cmd,8); //写入命令数据
_CS=1;
_nop_();
_nop_();
}
void WriteOneData(uchar Addr,uchar Data)
{
_CS=0;
WriteBitR(0xa0,3); //写入数据标志101
WriteBitR(Addr<<2,6); //写入地址数据
WriteBitR(Data,8); //写入数据
_CS=1;
_nop_();
_nop_();
}
void LCD_Init(void)
{
_CS=1;
_WR=1;
_DAT=1;
Write_cmd(0x52); //0b1000 0101 0010 1/3duty 4com
Write_cmd(0X30); //0b1000 0011 0000 内部时钟
Write_cmd(0x00); //0b1000 0000 0000 关振系统荡器和LCD偏压发生器
Write_cmd(0X0A); //0b1000 0000 1010 禁止看门狗
Write_cmd(0X02); //0b1000 0000 0010 打开系统振荡器
Write_cmd(0X06); //0b1000 0000 0110 打开LCD偏压
}
void display1()
{
uchar m;
for(m=0;m<30;m=m+2)
WriteOneData(m,0xff);
}
void Init()
{
_Vlcd=0;
LCD_Init();
}
void main()
{
Init();
while(1)
{
display1();
delay_ms(1);
}
}
|
-
|