各位大牛下午好,我用STC12C5204单片机控制1621驱动液晶
程序调了几天都没进展,显示的不知道什么乱七八糟的东西,好像命令根本写不进去,COM0和com1是个1v不到的电平,com3为3点几V的电平,com4有时有波形
刷我自己写的程序就是这个样子,SEGMENT一部分有波形,其余就是一个电平
打电话咨询合泰技术,让我搞他们的范例,于是我修改了下,还是老样子
大家帮我看看是什么问题,谢谢了
下面的就是从合泰网上下的范例,我稍微修改了下,基本是原封不动的
//STC12C5204AD单片机控制HT1621B驱动LCD
#include <STC12C52XXAD.h>
#include <stdio.h>
#include <intrins.h>
#define BIAS 0X52 //1/3偏压,4背极
#define RC256K 0X30 //系统时钟选择为片内RC振荡器
#define WDTDIS1 0X0A //禁止WDT溢出标志输出
#define TIMERDIS 0X08 //时基输出禁止
#define SYSEN 0X02 //打开系统时钟
#define SYSDIS 0X00 //关闭系统时钟和偏压发生器
#define LCDON 0X06 //打开LCD偏压发生器
#define LCDOFF 0X04 //关闭LCD偏压发生器
#define TONEON 0X12 //打开音频输出
#define TONEOFF 0X10 //关闭音频输出
#define CS P3_2
#define WR P3_4
#define DATA P3_5
#define uchar unsigned char
#define uint unsigned int
/***************************延时子函数******************************/
void delay(uchar i) //j=12延时约4.3us
{
while(i--)
{
uchar j=0;
while(j<8)
j++;
}
}
void SendBit_1621(uchar dat ,uchar cnt)
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((dat&0x80)==0)
DATA=0;
else DATA=1;
WR=0;
delay(2);
WR=1;
dat=dat<<1;
}
}
void SendDataBit_1621(uchar dat,uchar cnt)
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((dat&0x01)==0) DATA=0;
else DATA=1;
WR=0;
delay(2);
WR=1;
dat=dat>>1;
}
}
void SendCmd(uchar command)
{
CS=0;
_nop_();
_nop_();
SendBit_1621(0x80,4);
SendBit_1621(command,8);
CS=1;
}
void Write_1621(uchar addr,uchar dat)
{
CS=0;
_nop_();
_nop_();
SendBit_1621(0xa0,3);
SendBit_1621(addr,6);
SendDataBit_1621(dat,4);
CS=1;
}
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
uchar i;
CS=0;
_nop_();
_nop_();
SendBit_1621(0xa0,3);
SendBit_1621(addr,6);
for(i =0; i <cnt; i ++,p++)
{
SendDataBit_1621(*p,8);
}
CS=1;
}
/*******************************主函数******************************/
main()
{
uchar a[10];
a[0]=0xFF;a[1]=0xFF;a[2]=0xFF;a[3]=0xFF;a[4]=0xFF;
a[5]=0xFF;a[6]=0xFF;a[7]=0xFF;a[8]=0xFF;a[9]=0xFF;
a[10]=0xFF;a[11]=0xFF;a[12]=0xFF;a[13]=0xFF;a[14]=0xFF;
a[15]=0xFF;
SendCmd(BIAS);
SendCmd(SYSEN);
SendCmd(LCDON);
// SendCmd(RC256K);
WriteAll_1621(0,a,16);
// SendCmd(LCDOFF);
} |