段式LCD驱动
各位大侠:谁能讲讲内置LCD驱动的单片机如何驱动段式LCD。
最好能有实例工参考。
在线等万分感谢。 能不能把问题描述清楚? 内置还不简单,设置一下寄存器,往显示RAM填数据就OK了 下载一份带LCD的PIC单片机datasheet,有详细解释,
另外再下载一份《PIC中档单片机参考手册》,有更详细的说明! duci002 发表于 2012-8-24 10:33 static/image/common/back.gif
下载一份带LCD的PIC单片机datasheet,有详细解释,
另外再下载一份《PIC中档单片机参考手册》,有更详细的 ...
大哥,我用51的。 我想用内置LCD驱动的单片机直接驱动附件中的LCD,请各位大侠指点一下。 本帖最后由 eaglelpx 于 2012-8-25 13:30 编辑
我也在搞,直接驱动电路参考论坛中那个,M8搞得,不错的 我用51直接驱动的~~~~~~~~~~~ 用单片机内置LCD驱动器的话,要看什么单片机了,不过基本步骤应该都一样,设置I/O口工作模式、寄存器,然后抛数据就可以了!至于怎么设置,就要看单片机的手册了! 我前段时间用中颖的SH79F 166A 驱起来一个!
如果说想要用 I/O口直接驱动LCD的话,对液晶本身的参数是有要求的,映像中,好像LCD的占空比要是 1/2,驱动电压要和你I/O口电压一样! 此项,仅供参考! hengjng_t 发表于 2012-8-29 11:22 static/image/common/back.gif
用单片机内置LCD驱动器的话,要看什么单片机了,不过基本步骤应该都一样,设置I/O口工作模式、寄存器,然后 ...
谢谢,这段时间又要忙了,回头慢慢搞。 不用专门的驱动芯片的话,那么就要直接用I/O口驱动了。根据断式液晶的特性,不能采用数码管的方法驱动,需要“交流”。什么叫段式液晶的“交流”呢,别人告诉我的,就是在一段(6楼图片中的A段吧)的两端都接上I/O口,设置单片机的端口为P1.0和P1.1,在两个端口之间一会儿左,一会儿右,这就是“交流”。
杜洋在《无线电》杂志上有文章发表,我看过,表述不清,你可以去书店翻一下就知道了。好像现在《无线电》有电子版本。 lxa0 发表于 2012-8-25 22:15 static/image/common/back.gif
我用51直接驱动的~~~~~~~~~~~
你是用51直接驱动段式液晶的吗
,可以请教一下你吗
STC手册上就有例子 STC12C5A60S2新版的 找到要用的MCU关于LCD驱动那章,把那章全部的寄存器描述都看看,重点在频率,电压参数设置;不愿看硬件图的话,就在对应LCD RAM里,一个一个位去置高,看对应哪划亮了,再记录。 dgdzas 发表于 2012-9-27 13:23 static/image/common/back.gif
找到要用的MCU关于LCD驱动那章,把那章全部的寄存器描述都看看,重点在频率,电压参数设置;不愿看硬件图的 ...
谢谢,准备买一块带LCD驱动的单片机研究研究 horalxi 发表于 2012-8-25 13:11 static/image/common/back.gif
我想用内置LCD驱动的单片机直接驱动附件中的LCD,请各位大侠指点一下。
这么简单,直接用IO驱动就可以。 //STC单片机控制HT1621B驱动LCD
#include"STC12C5A60S2.h"
#include"stdio.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
#define BIAS 0X52 //1/3偏压,4背极 0x50 1/2偏压,
#define RC256K 0X30 //系统时钟选择为片内RC振荡器
#define WDTDIS10X0A //禁止WDT溢出标志输出
#define TIMERDIS 0X08 //时基输出禁止
#define SYSEN 0X02 //打开系统时钟
#define SYSDIS 0X00 //关闭系统时钟和偏压发生器
#define LCDON 0X06 //打开LCD偏压发生器
#define LCDOFF 0X04 //关闭LCD偏压发生器
#define TONEON 0X12 //打开音频输出
#define TONEOFF0X10 //关闭音频输出
//HT1621控制位(液晶模块接口定义,根据自已的需要更改)
sbit HT1621_DAT=P1^4; //HT1621数据引脚
sbit HT1621_CS=P1^5;//HT1621使能引脚
sbit HT1621_WR=P1^6;//HT1621时钟引脚
//HT1621段地址
#define LCD_1 4 //①
#define LCD_2 5 //②
#define LCD_3 6 //③
#define LCD_4 7 //④
#define LCD_T4 8 //T4
#define LCD_T1 9 //T1
#define LCD_T2 10 //T2
#define LCD_T3 11 //T3
#define LCD_T5 16 //T5
#define LCD_1B 17 //数码管1
#define LCD_1G 18
#define LCD_1C 19
#define LCD_1A 21
#define LCD_1F 22
#define LCD_1E 23
#define LCD_1D 24
#define LCD_NSZ25 //逆时针箭头
#define LCD_2B 26 //数码管2
#define LCD_2G 27
#define LCD_2C 28
#define LCD_2A 29
#define LCD_2F 30
#define LCD_2E 31
#define LCD_2D 32
#define LCD_TPD33 //TPD
#define LCD_3B 34 //数码管3
#define LCD_3G 35
#define LCD_3C 36
#define LCD_3A 37
#define LCD_3F 38
#define LCD_3E 39
#define LCD_3D 40
#define LCD_SSZ41 //顺时针箭头
#define LCD_4B 42 //数码管4
#define LCD_4G 43
#define LCD_4C 44
#define LCD_4A 45
#define LCD_4F 46
#define LCD_4E 47
#define LCD_4D 48
#define LCD_LINE 49 //LINE
#define LCD_5B 50 //数码管5
#define LCD_5G 51
#define LCD_5C 52
#define LCD_5A 53
#define LCD_5F 54
#define LCD_5E 55
#define LCD_5D 56
//unsigned char data LCD_clear[]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
//unsigned char data LED_smg0[]={0xFA,0x0A,0xD6,0x9E,0x2E,0xBC,0xFC,0x1A,0xFE,0xBE,0xFF,0x00}; //时针标志0 不显示
// 0 1 2 3 4 5 6 7 8 9 on off
//unsigned char data LED_smg[]={0xFB,0x0B,0xD7,0x9F,0x2F,0xBD,0xFD,0x1B,0xFF,0xBF,0xFF,0x00};//时针标志1显示
// 0 1 2 3 4 5 6 7 8 9 on off
//unsigned char data LED_smg1[]={0x00,0x10,0x20,0x40,0x80,0x02,0x06,0x0e,0x0f,0xff};
// off① ② ③ ④ T1 T2 T3 T4 on
/*
void delay(uchar i) //j=12延时约4.3us
{
while(i--)
{
uchar j=0;
while(j<8)
j++;
}
} */
/*
void delay(uchar z) //1us
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=6;y>0;y--);
} */
void delay(unsigned int n)// STC 1T系列单片机1.25us
{
while(n--);
}
void Delayms(unsigned int z) //STC 1T系列单片机24MHZ z=1时精确延时1ms
{
unsigned int x,y;
for(x=z;x>0;x--)
for(y=1850;y>0;y--);
}
/******************************************************
SendBit_1621(送数据程序)
*******************************************************/
void SendBit_1621(uchar dat ,uchar cnt) //data 的高cnt 位写入HT1621,高位在前
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((dat&0x80)==0)HT1621_DAT=0;
elseHT1621_DAT=1;
HT1621_WR=0;
delay(5);
HT1621_WR=1;
delay(5);//需加延迟 否则4.6V以下显示不了
dat=dat<<1;
}
}
/******************************************************
写数据函数,cnt为传送数据位数,数据传送为低位在前
*******************************************************/
void SendDataBit_1621(uchar dat,uchar cnt)
{
uchar i;
for(i =0; i <cnt; i ++)
{
if((dat&0x01)==0) HT1621_DAT=0;
else HT1621_DAT=1;
HT1621_WR=0;
delay(5);
HT1621_WR=1;
delay(5);//需加延迟 否则4.6V以下显示不了
dat=dat>>1;
}
}
/********************************************************
函数名称:void SendCmd(uchar command)
功能描述: HT1621命令写入函数
参数说明:Cmd为写入命令数据
返回说明:无
说 明:写入命令标识位100
********************************************************/
void SendCmd(uchar command)
{
HT1621_CS=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SendBit_1621(0x80,4); //写入命令标志100
SendBit_1621(command,8); //写入命令数据
HT1621_CS=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
/********************************************************
函数名称:void Write_1621(uchar addr,uchar dat)
功能描述: HT1621在指定地址写入数据函数
参数说明:Addr为写入初始地址,Data为写入数据
返回说明:无
说 明:因为HT1621的数据位4位,所以实际写入数据为参数的后4位
********************************************************/
void Write_1621(uchar addr,uchar dat)
{
HT1621_CS=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SendBit_1621(0xa0,3); //写入数据标志101
SendBit_1621(addr,6); //写入地址数据
SendDataBit_1621(dat,4); //写入数据
HT1621_CS=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
/********************************************************
函数名称:void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
功能描述: HT1621连续写入方式函数
参数说明:Addr为写入初始地址,*p为连续写入数据指针, cnt为写入数据总数
返回说明:无
说 明:HT1621的数据位4位,此处每次数据为8位,写入数据总数按8位计算
********************************************************/
void WriteAll_1621(uchar addr,uchar *p,uchar cnt)
{
uchar i;
HT1621_CS=0;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SendBit_1621(0xa0,3); //写入数据标志101
SendBit_1621(addr,6); //写入地址数据
for(i =0; i <cnt; i ++,p++)
{
SendDataBit_1621(*p,8);//写入数据
}
HT1621_CS=1;
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
/********************************************************
函数名称:void Ht1621_Init(void)
功能描述: HT1621初始化
返回说明:无
说 明:初始化后,液晶屏所有字段均显示
********************************************************/
void Ht1621_Init(void)
{
HT1621_CS=1;
HT1621_WR=1;
HT1621_DAT=1;
Delayms(1000); //延时使LCD工作电压稳定
SendCmd(BIAS); //1/3偏压,4背极
SendCmd(RC256K);//使用内部振荡器
SendCmd(SYSDIS); //关闭系统时钟和偏压发生器
SendCmd(WDTDIS1); //禁止WDT溢出标志输出
SendCmd(SYSEN); //打开系统时钟
SendCmd(LCDON); //打开LCD偏压发生器
}
S1S2 当成为2位数码管的小数点11 12 是不是搞反了啊 这样得编2个译码{:sad:} yao1 发表于 2012-9-28 14:43 static/image/common/back.gif
S1S2 当成为2位数码管的小数点11 12 是不是搞反了啊 这样得编2个译码 ...
是不合理,LCD厂做出来了才发现。 studyqu309 发表于 2012-9-26 16:35 static/image/common/back.gif
你是用51直接驱动段式液晶的吗
,可以请教一下你吗
是的
请教不敢当
.......... 请问LZ这个驱动现在做成怎样啦? 楼主可以参照论坛圈圈大神的思路,,非常好 mark!!!!!!! hengjng_t 发表于 2012-8-29 11:22
用单片机内置LCD驱动器的话,要看什么单片机了,不过基本步骤应该都一样,设置I/O口工作模式、寄存器,然后 ...
我也在用中颖的单片机来驱动段式液晶,SH79F6488,感觉配置寄存器不对,请问你调试出来了没?可以提供例程来看看吗? studyqu309 发表于 2012-9-26 16:35
你是用51直接驱动段式液晶的吗
,可以请教一下你吗
当时试验的时候
直接用51驱动3位半的lcd
现在想起来
和你说的段式lcd还是有区别的
前几日偶得一电子秤上的lcd显示屏
见下图
正在搞呢
单片机模拟交流信号驱动
页:
[1]