用STC系列MCU的IO口直接驱动段码LCD

发布者:as8849402最新更新时间:2016-09-09 来源: eefocus关键字:STC系列  IO口  直接驱动  段码LCD 手机看文章 扫描二维码
随时随地手机看文章
当产品需要段码LCD显示时,如果使用不带LCD驱动器的MCU,则需要外接LCD驱动IC,这会增加成本和PCB面积。事实上,很多小项目,比如大量的小家电,需要显示的段码不多,常见的是4个8带小数点或时钟的冒号“:”,这样如果使用IO口直接扫描显示,则会减小PCB面积,降低成本。

但是,本方案不合适驱动太多的段( 占用IO太多),也不合适非常低功耗的场合。

段码LCD驱动简单原理:如图1所示。

LCD是一种特殊的液态晶体,在电场的作用下晶体的排列方向会发生扭转,因而改变其透光性,从而可以看到显示内容。LCD有一个扭转阀值,当LCD两端电压高于此阀值时,显示内容,低于此阀值时,不显示。通常LCD有3个参数:工作电压、DUTY(对应COM数)和BIAS(即偏压,对应阀值),比如4.5V、1/4 DUTY、1/3 BIAS,表示LCD显示电压为4.5V,4个COM,阀值大约是1.5V,当加在某段LCD两端电压大于1.5V时(一般加4.5V)显示,而加1.5V时不显示。但是LCD对于驱动电压的反应不是很明显的,比如加2V时,可能会微弱显示,这就是通常说的“鬼影”。所以要保证驱动显示时,要大于阀值电压比较多,而不显示时,要用比阀值小比较多的电压。

注意:LCD的两端不能加直流电压,否则时间稍长就会损坏,所以要保证加在LCD两端的驱动电压的平均电压为0。LCD使用时分割扫描法,任何时候一个COM扫描有效,另外的COM处于无效状态。

驱动1/4Duty 1/2BIAS 3V的方案电路见图1,LCD扫描原理见图3,MCU为3V工作,用双向口做COM,PUSH-PULL或STANDARD输出口接SEG,并且每个COM都接一个47K电阻到一个电容,RC滤波后得到一个中点电压。在轮到某个COM扫描时,设置成PUSH-PULL输出,如果与本COM连接的SEG不显示,则SEG输出与COM同相,如果显示,则反相。扫描完后,这个COM的IO就设置成高阻,这样这个COM就通过47K电阻连接到1/2VDD电压,而SEG继续输出方波,这样加在LCD上的电压,显示时是+-VDD,不显示时是+-1/2VDD,保证了LCD两端平均直流电压为0。

驱动1/4Duty 1/3BIAS 3V的方案电路见图4,LCD扫描原理见图5,,MCU为5V工作,SEG线通过电阻分压输出1.5V、3.5V,COM线通过电阻分压输出0.5V、2.5V(高阻时)、4.5V。在轮到某个COM扫描时,设置成PUSH-PULL输出,如果与本COM连接的SEG不显示,则SEG输出与COM同相,如果显示,则反相。扫描完后,这个COM的IO就设置成高阻,这样这个COM就通过47K电阻连接到2.5V电压,而SEG继续输出方波,这样加在LCD上的电压,显示时是+-3.0V,不显示时是+-1.0V,完全满足LCD的扫描要求。

    当需要睡眠省电时,把所有COM和SEG驱动IO全部输出低电平,LCD驱动部分不会增加额外电流。

 

 

 

 

 

 

图1:驱动1/4Duty 1/2BIAS 3V LCD的电路

[转] 用STC系列MCU的IO口直接驱动段码LCD - 刘世生 - DAS的博客

图2:段码名称图

[转] 用STC系列MCU的IO口直接驱动段码LCD - 刘世生 - DAS的博客

 

 

 

 

 

图3:1/4Duty 1/2BIAS扫描原理图

[转] 用STC系列MCU的IO口直接驱动段码LCD - 刘世生 - DAS的博客

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图4:驱动1/4Duty 1/3BIAS 3V LCD的电路

[转] 用STC系列MCU的IO口直接驱动段码LCD - 刘世生 - DAS的博客

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

图5:1/4Duty 1/3BIAS扫描原理图

[转] 用STC系列MCU的IO口直接驱动段码LCD - 刘世生 - DAS的博客

 

为了使用方便,显示内容放在一个显存中,其中的各个位与LCD的段一一对应,见图6。

图6:LCD真值表和显存影射表

[转] 用STC系列MCU的IO口直接驱动段码LCD - 刘世生 - DAS的博客

 

图7:驱动效果照片

[转] 用STC系列MCU的IO口直接驱动段码LCD - 刘世生 - DAS的博客

 

 

本LCD扫描程序仅需要两个函数:

1、 LCD段码扫描函数  void LCD_scan(void)

程序隔一定的时间调用这个函数,就会将LCD显示缓冲的内容显示到LCD上,全部扫描一次需要8个调用周期,调用间隔一般是1~2ms,假如使用1ms,则扫描周期就是8ms,刷新率就是125HZ。

2、 LCD段码显示缓冲装载函数  void   LCD_load(u8 n,u8 dat)

本函数用来将显示的数字或字符放在LCD显示缓冲中,比如LCD_load(1,6),就是要在第一个数字位置显示数字6,支持显示0~9,A~F,其它字符用户可以自己添加。

另外,用宏来显示、熄灭或闪烁冒号或小数点。

详细的程序请从STC的官网www.stcmcu.com下载。

 

/****************** LCD段码扫描函数 ***************************

u8 code T_COM[4]={0x08,0x04,0x02,0x01};

void LCD_scan(void) //5us @22.1184MHZ

{   u8 j;

j = scan_index >> 1;        //COMx

P2n_pure_input(0x0f);       //全部COM输出高阻, COM为中点电压

if(scan_index & 1)          //反相扫描

{   P1 = ~LCD_buff[j]; //送SEG驱动码

P2 = ~(LCD_buff[j|4] & 0xf0);   //送SEG驱动码和COM驱动码

}

else  //正相扫描

{   P1 = LCD_buff[j];          //送SEG驱动码

P2 = LCD_buff[j|4] & 0xf0;  //送SEG驱动码和COM驱动码

}

P2n_push_pull(T_COM[j]); //某个COM设置为推挽输出

if(++scan_index >= 8) scan_index = 0;   //扫描完成,重复扫描

}

 

/****************** LCD段码显示缓冲装载函数 ***************************/

/****************** 对第1~6数字装载显示函数 ***************************/

u8 code T_LCD_mask[4]  = {~0xc0,~0x30,~0x0c,~0x03};

u8 code T_LCD_mask4[4] = {~0x40,~0x10,~0x04,~0x01};

void LCD_load(u8 n,u8 dat) //n为第几个数字,为1~6,dat为要显示的数字 10us@22.1184MHZ

{   u8 i,k;

u8 *p;

if((n == 0) || (n > 6)) return;

i = t_display[dat];

 

if(n <= 4) //1~4

{   n--;

p = LCD_buff;

}

else

{   n = n - 5;

p = &LCD_buff[4];

}

 

k = 0;

if(i & 0x08) k |= 0x40; //D

*p = (*p & T_LCD_mask4[n]) | (k>>2*n);

p++;

 

k = 0;

if(i & 0x04) k |= 0x40; //C

if(i & 0x10) k |= 0x80; //E

*p = (*p & T_LCD_mask[n]) | (k>>2*n);

p++;

 

k = 0;

if(i & 0x02) k |= 0x40; //B

if(i & 0x40) k |= 0x80; //G

*p = (*p & T_LCD_mask[n]) | (k>>2*n);

p++;

 

k = 0;

if(i & 0x01) k |= 0x40; //A

if(i & 0x20) k |= 0x80; //F

*p = (*p & T_LCD_mask[n]) | (k>>2*n);

}

 

文档完毕。

关键字:STC系列  IO口  直接驱动  段码LCD 引用地址:用STC系列MCU的IO口直接驱动段码LCD

上一篇:用单片机IO口直接驱动段式LCD的方法
下一篇:单片机随机数:rand(),srand()

推荐阅读最新更新时间:2024-03-16 15:09

ARM笔记: GPIO口LED程序
leds.bin:crt0.S leds.c arm-linux-gcc -g -c -o crt0.o crt0.S arm-linux-gcc -g -c -o leds.o leds.c arm-linux-ld -Ttext 0x00000000 -g crt0.o leds.o -o leds_elf arm-linux-objcopy -O binary -S leds_elf leds.bin arm-linux-objdump -D -m arm leds_elf leds.dis clean: rm -f leds.dis leds.bin leds_elf *.o .text .gl
[单片机]
关于STM32GPIO口配置命令
以下代码摘自原子的stm32开发指南 //初始化 PB5 和 PE5 为输出口.并使能这两个口的时钟 void LED_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOE, ENABLE); //使能 PB,PE 端口时钟 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5; //PB.5 推挽输出 GPIO_InitStructure.GPIO_M
[单片机]
STM8S103系列IO口模拟串口通信(实现真正串口)
STM8s103f3p3单片机只有一个串口,有时候在实际项目中,我们需要用到多个串口来实现项目要求,此时,我们可以通过IO口来模拟串口通信,在实现项目需求的同时,还大大降低了成本。 实验原理 默认串口空闲状态为高电平,开始位为0,然后发送8个数据位,然后是奇偶校验位,停止位为高电平。数字电路中只有0、1两种状态,这是我们用IO口可以实现的,我们认为高电平是1,低电平是0。也就是说我们用只到了IO口的输出功能(对于实现TX功能的IO口而言),那么到底发多长时间的高电平呢?这是由TIMx定时器决定的,TIMx定时器通过计数器实现。这个时间取决于什么呢?取决于波特率。也就是说,只要我们初始化设置好了TIMx定时器我们就不需要考虑
[单片机]
STM8S103<font color='red'>系列</font><font color='red'>IO口</font>模拟串口通信(实现真正串口)
物联网之STM32开发二(GPIO口操作)
STM32—GPIO操作(基于STM32F051开发板) 内容概述: GPIO的基本概念及寄存器介绍 照亮电子世界的那盏灯——LED寄存器版 照亮电子世界的那盏灯——LED库函数版 初识人机交互——按键 GPIO的基本概念及寄存器介绍: 内容概述: GPIO接口简介 GPIO功能复用 GPIO寄存器介绍 GPIO接口简介: 通用输入输出接口GPIO是嵌入式系统、单片机开发过程中最常用的接口,用户可以通过编程灵活的对接口进行控制,实现对电路板上LED、数码管、按键等常用设备控制驱动,也可以作为串口的数据收发管脚,或AD的接口等复用功能使用。因此其作用和功能是非常重要的。 GPIO功能
[单片机]
物联网之STM32开发二(GP<font color='red'>IO口</font>操作)
STM32F4工程--IO口--GPIO工作模式详解
一、基础知识 1、STM32F429IGT6 ①一共有9组IO: PA~PI ②其中PA~PH 每组16个IO PI只有PI0~PI11 ③一共有140个IO口: 16*8+12=140 2、工作模式 四种输入模式:输入浮空、输入上拉、输入下拉、模拟输入 ; 四种输出模式:开漏输出(带上拉或者下拉)、开漏复用功能(带上拉或者下拉)、推挽式输出(带上拉或者下拉)、推挽式复用功能(带上拉或者下拉); 四种最大输出速度: -2MHZ低速、-25MHz中速、 -50MHz快速、-100MHz 高速。 3、IO口可以容忍5V电压。 二、GPIO的8种工作模式 1、浮空输入模式 ①信号由外部输入到引脚。 ②首先遇到上拉下拉电阻,这个
[单片机]
STM32F4工程--<font color='red'>IO口</font>--GPIO工作模式详解
STM8S独立按键IO口设置及按下事件问题
GPIO设置 按键检测 1 连续按键检测短按 关键代码 1 GPIO设置 STM8 I/O 口引脚配置表 Px_DDR Px_CR1 Px_CR2 I/O 方式 引脚状态 0 0 0 输入 悬浮输入 0 0 1 输入 上拉输入 0 1 0 输入 中断悬浮输入 0 1 1 输入 中断上拉输入 1 0 0 输出 开漏输出 1 1 0 输出 推挽输出 1 x 1
[单片机]
STC系列单片机不断电下载程序的程序设计思路及方法
本文针对单片机下载程序时需要重复机械式复位产生的一系列调试繁琐的问题,提出了一种用软件引导代替单片机硬件复位写入ROM的方法。该方法通过检测串口数据流是否合法,来判断是否执行ISP引导程序,从而利用软件方式复位,可以让STC单片机复位后从ISP引导程序处执行,利用该特性可以模拟单片机上电复位状态,实现单片机的不断电下载。 随着单片机技术的发展,单片机片内存储器的容量越来越大,可以容纳越来越大的程序。由于程序越来越复杂,在程序调试过程中需要不断进行硬件复位来下载程序,虽然在线下载程序的方法已经普遍应用,但在现实调试实现中还是比较繁琐,因此人们在寻求一种用软件代替硬件的复位方法来调试下载程序,近而在工程实际中更加快捷方便地进行
[单片机]
<font color='red'>STC</font><font color='red'>系列</font>单片机不断电下载程序的程序设计思路及方法
STM32F103x8B PB3、PB4、PA14、PA15引脚作为普通IO口使用
STM32的PB3、PB4、PA14、PA15引脚可以在使用ISP烧录的情况下释放出来,作为普通IO口使用。 初始化代码如下: void Gpio_init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB | RCC_APB2Periph_AFIO,ENABLE); GPIO_PinRemapConfig(GPIO_Remap_SWJ_Disable,ENABLE); GPIO_InitStructure.GPIO_P
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved