amobbs.com 阿莫电子技术论坛
标题:
请问HT1621的晶振该如何起振?
[打印本页]
作者:
xuyw123
时间:
2011-4-21 15:23
标题:
请问HT1621的晶振该如何起振?
请问HT1621的晶振该如何起振?
我的HT1621初始化程序如下:
void lcd_init(void)
{
CS_HIGH;
WR_HIGH;
DATA_HIGH;
for(unsigned long i=0;i<1000;i++)
{
asm("nop");
}
SendCmd(BIAS); //1/2bias,4comm
SendCmd(SYSEN); //启动内部振荡器
SendCmd(XTAL);
SendCmd(LCDON); //打开显示
}
按照datasheet中的说明,应该设置了SendCmd(XTAL);就可以起振的吧,可是结果却是32K的晶振脚却是一个高电平,请高手指导?
作者:
gallle
时间:
2011-4-21 15:29
#define ComMode 0x52 //4COM,1/3bias 1000 0101 0010
#define RCosc 0x30 //内部RC振荡器(上电默认)1000 0011 0000
#define CRosc 0x28 //外部32768振荡器 1000 0010 1000
#define LCD_on 0x06 //打开LCD 偏压发生器1000 0000 0 11 0
#define LCD_off 0x04 //关闭LCD显示
#define Sys_en 0x02 //系统振荡器开 1000 0000 0010
#define WDT_en 0x02 //看门狗输出有效 1000 0000 1110
#define TMR_en 0x0C //时基输出有效 1000 0000 1100
#define TMR_clr 0x18 //时基输出清零 1000 0001 1000
// 9位命令字
#define IRQen 0x10 //外部时基打开 1001 0001 0000
#define WDT1hz 0x40 //外部时基打开 1001 0100 0000
/****************************************************************************
Name: Init_1621(初始化1621)
*****************************************************************************/
void Init_1621(void)
{
SendCmd_1621(ComMode);
SendCmd_1621(CRosc);
SendCmd_1621(TMR_clr);
SendCmd_1621(TMR_en); //没增加高位的命令80的
SendCmd_1621(TMR_clr);
SendCmd1_1621(WDT1hz);//增加了高位的命令90的
SendCmd1_1621(IRQen);
SendCmd_1621(Sys_en);
SendCmd_1621(LCD_on);
}
作者:
gallle
时间:
2011-4-21 15:30
#define ComMode 0x52 //4COM,1/3bias 1000 0101 0010
#define RCosc 0x30 //内部RC振荡器(上电默认)1000 0011 0000
#define CRosc 0x28 //外部32768振荡器 1000 0010 1000
#define LCD_on 0x06 //打开LCD 偏压发生器1000 0000 0 11 0
#define LCD_off 0x04 //关闭LCD显示
#define Sys_en 0x02 //系统振荡器开 1000 0000 0010
#define WDT_en 0x02 //看门狗输出有效 1000 0000 1110
#define TMR_en 0x0C //时基输出有效 1000 0000 1100
#define TMR_clr 0x18 //时基输出清零 1000 0001 1000
// 9位命令字
#define IRQen 0x10 //外部时基打开 1001 0001 0000
#define WDT1hz 0x40 //外部时基打开 1001 0100 0000
/****************************************************************************
Name: Init_1621(初始化1621)
*****************************************************************************/
void Init_1621(void)
{
SendCmd_1621(ComMode);
SendCmd_1621(CRosc);
SendCmd_1621(TMR_clr);
SendCmd_1621(TMR_en); //没增加高位的命令80的
SendCmd_1621(TMR_clr);
SendCmd1_1621(WDT1hz);//增加了高位的命令90的
SendCmd1_1621(IRQen);
SendCmd_1621(Sys_en);
SendCmd_1621(LCD_on);
}
作者:
xuyw123
时间:
2011-4-21 15:59
请问晶振的起振跟时基输出、看门狗输出有关系吗?我照着你的程序改后结果是一样的,晶振依然没有起振
作者:
xuyw123
时间:
2011-4-22 09:27
我卸下32K晶振用内部振荡器还是没有输出,所有的驱动端口都为高电平,请白沙以及高手指导呀,驱动程序如下所示:
#define BIAS 0x52 //4COM,1/2bias 1000 0101 0010
#define RCosc 0x30 //内部RC振荡器(上电默认)1000 0011 0000
#define SYSEN 0x02 //系统振荡器开 1000 0000 0010
#define WDTen 0x02 //看门狗输出有效 1000 0000 1110
#define TMRen 0x0C //时基输出有效 1000 0000 1100
#define TMRclr 0x18 //时基输出清零 1000 0001 1000
#define LCDOFF 0x04 //关闭LCD显示
#define LCDON 0x06 //打开LCD 偏压发生器1000 0000 0 11 0
#define XTAL 0x28 //外部32768振荡器 1000 0010 1000
#define IRQen 0x10 //外部时基打开 1001 0001 0000
#define WDT1hz 0x40 //外部时基打开 1001 0100 0000
#define CS_LOW GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_4,0x00)
#define CS_HIGH GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_4,0xFF)
#define RD_LOW GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_5,0x00)
#define RD_HIGH GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_5,0xFF)
#define WR_LOW GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6,0x00)
#define WR_HIGH GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_6,0xFF)
#define DATA_LOW GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7,0x00)
#define DATA_HIGH GPIOPinWrite(GPIO_PORTC_BASE,GPIO_PIN_7,0xFF)
void init_LCD_IO()
{
GPIOPinTypeGPIOOutput(GPIO_PORTC_BASE,GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_4, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_5, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_6, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU);
GPIOPadConfigSet(GPIO_PORTC_BASE, GPIO_PIN_7, GPIO_STRENGTH_8MA, GPIO_PIN_TYPE_STD_WPU);
}
void lcd_init(void)
{
SendCmd(BIAS); //1/2bias,4comm
SendCmd(RCosc);
SendCmd(TMRclr);
SendCmd(TMRen);
SendCmd(TMRclr);
SendCmd1(WDT1hz);
SendCmd1(IRQen);
SendCmd(SYSEN); //启动内部振荡器
SendCmd(LCDON); //打开显示
}
void SendBit_1621(unsigned char data,unsigned char cnt) //data 的高cnt 位写入HT1621,高位在前
{
unsigned char i;
for(i =0; i <cnt; i ++)
{
if((data&0x80)==0) DATA_LOW;
else DATA_HIGH;
WR_LOW;
for(unsigned long i=0;i<500;i++)
{
asm("nop");
}
WR_HIGH;
for(unsigned long i=0;i<500;i++)
{
asm("nop");
}
data<<=1;
}
}
void SendDataBit_1621(unsigned char data,unsigned char cnt) //data 的低cnt 位写入HT1621,低位在前
{
unsigned char i;
for(i =0; i <cnt; i ++)
{
if((data&0x01)==0) DATA_LOW;
else WR_HIGH;
WR_LOW;
for(unsigned long i=0;i<500;i++)
{
asm("nop");
}
WR_HIGH;
for(unsigned long i=0;i<500;i++)
{
asm("nop");
}
data>>=1;
}
}
void SendCmd(unsigned char command)
{
CS_LOW;
SendBit_1621(0x80,4); //写入标志码"100"
SendBit_1621(command,8); //写入8 位数据,其中前8 位为command 命令
CS_HIGH;
}
void SendCmd1(unsigned char command)
{
CS_LOW;
SendBit_1621(0x90,4); //写入标志码"100"
SendBit_1621(command,8); //写入8 位数据,其中前8 位为command 命令
CS_HIGH;
}
void Write_1621(unsigned char addr,unsigned char data)
{
CS_LOW;
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr<<2,6); //写入6 位addr
SendDataBit_1621(data,4); //写入data 的低4 位
CS_HIGH;
}
void WriteAll_1621(unsigned char addr,unsigned char *p,unsigned char cnt)
{
unsigned char i;
CS_LOW;
SendBit_1621(0xa0,3); //写入标志码"101"
SendBit_1621(addr<<2,6); //写入6 位addr
for(i =0; i <cnt; i ++,p++) //连续写入数据
{
SendDataBit_1621(*p,8);
}
CS_HIGH;
}
作者:
gallle
时间:
2011-4-22 12:25
你的晶振是好的么?
加电容了么?
作者:
xuyw123
时间:
2011-4-22 13:24
是好的啊,也加电容了,不用晶振用内部振荡器就好用,但是一用晶振就不好使,换了几个晶振都是这样,不知道是什么原因?
作者:
gallle
时间:
2011-4-22 13:30
去掉电容试试
作者:
xuyw123
时间:
2011-4-22 13:41
去掉电容一样的效果,配成内部振荡器就对,配成外接晶振就不对,很奇怪,不知道有没有用晶振成功的案例啊
作者:
xuyw123
时间:
2011-4-22 13:50
初始化函数改成如下就能得到正确的输出
void lcd_init(void)
{
SendCmd(BIAS); //1/2bias,4comm
SendCmd(RCosc);
SendCmd(SYSEN); //启动内部振荡器
SendCmd(LCDON); //打开显示
}
而改成如下输出就不对
void lcd_init(void)
{
SendCmd(BIAS); //1/2bias,4comm
SendCmd(XTAL);
SendCmd(SYSEN); //启动内部振荡器
SendCmd(LCDON); //打开显示
}
作者:
gallle
时间:
2011-4-22 13:54
我的就成功了呀!
作者:
xuyw123
时间:
2011-4-22 14:12
你是用外接晶振成功的吗?
欢迎光临 amobbs.com 阿莫电子技术论坛 (https://www.amobbs.com/)
Powered by Discuz! X3.4