PIC单片机驱动LCD断码屏代码生成工具

发布者:忙中取乐最新更新时间:2018-08-12 来源: eefocus关键字:PIC单片机  驱动LCD  断码屏 手机看文章 扫描二维码
随时随地手机看文章

PIC 16系列单片机部分型号都带有LCD(断码)驱动模块, 

在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分。 

所以写了一个宏函数,自动生成驱动逻辑。


断码屏与驱动管脚对应关系


断码屏的一位一般由8段构成:A,B,C,D,E,F,G,DP。


构成对应图形:


     AAAAAA

    F      B

    F      B

    F      B

     GGGGGG

    E      C

    E      C

    E      C

     DDDDDD  DP


每段对应PIC单片机的一个驱动管脚。而这个管脚由PIC单片机LCD驱动模块的LCDDATAX寄存器 

控制。通过PIC的寄存器映射头文件可以表示为COMxSEGy。


头文件进行管脚配置


首先定义每一位的各个段:


#define LCD_A1          SEGx1COMy1

#define LCD_B1          SEGx2COMy2

#define LCD_C1          SEGx3COMy3

#define LCD_D1          SEGx4COMy4

#define LCD_E1          SEGx5COMy5

#define LCD_F1          SEGx6COMy6

#define LCD_G1          SEGx7COMy7

#define LCD_DP1         SEGx8COMy8


不同的数字由各段的亮暗来表示。例如第一位数字0表示为:


LCD_A1 = 1;

LCD_B1 = 1;

LCD_C1 = 1;

LCD_D1 = 1;

LCD_E1 = 1;

LCD_F1 = 1;

LCD_G1 = 0;


之后还需要定义数字位图,例如数字1和0定义为:


#define LCD_DIGIT_0     (LCD_SEG_A|LCD_SEG_B|LCD_SEG_C|LCD_SEG_D|LCD_SEG_E|LCD_SEG_F)

#define LCD_DIGIT_1     (LCD_SEG_B|LCD_SEG_C)


函数自动生成


之后对断码屏的每一位显示来说,就是对相应管脚的0,1赋值。利用定义好的 

命名规则可以利用宏函数来自动生成对应的显示函数。


#define SEG_VALUE(seg, num, character) \

    if (character&LCD_SEG_##seg) \

    { \

        LCD_##seg##num = 1; \

    } \

    else \

    { \

        LCD_##seg##num = 0; \

    }


#define SEG_GENERATE(num) \

    SEG_VALUE(A, num, character) \

    SEG_VALUE(B, num, character) \

    SEG_VALUE(C, num, character) \

    SEG_VALUE(D, num, character) \

    SEG_VALUE(E, num, character) \

    SEG_VALUE(F, num, character) \

    SEG_VALUE(G, num, character) \



#define generate_begin(page)  \

void lcd_##page##_display_value(unsigned char column, unsigned char character) \

{ \

    switch (column) \

    {


#define generate_end() \

    default: \

        break; \

    } \

}


#define gnerate_column(col, num) \

    case col: \

    SEG_GENERATE(num); \

    break;


 /*define generate micro-define*/

/*need add generate_column logic*/

#define generate_page1_lcd_display_value() \

    generate_begin(page1) \

    gnerate_column(LCD_COLUMN_1, 1) \

    gnerate_column(LCD_COLUMN_2, 2) \

    gnerate_column(LCD_COLUMN_3, 3) \

    gnerate_column(LCD_COLUMN_4, 4) \

    generate_end()


/*void lcd_page1_display_value(unsigned char column, unsigned char character)*/

generate_page1_lcd_display_value()


结束


生成显示函数以后可以像如下调用:


lcd_page1_display_value(LCD_COLUMN_1, LCD_DIGIT_0);

1

在这里只是贴出了一个梗概,其中很多细节并没有写到,后续会考虑在github 

上贴出完整代码。 

如果有不明白的地方,尽可以提出。


关键字:PIC单片机  驱动LCD  断码屏 引用地址:PIC单片机驱动LCD断码屏代码生成工具

上一篇:PIC单片机配置字
下一篇:PIC单片机之PIC16F884

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

PIC单片机人机接口模块独立式按键的程序设计
  下面是查询方式下的键盘程序,程序中没有使用散转指令,也没有软件防抖动措施,只包括按键查询、键功能程序转移。FP0~FP7为功能程序入口地址标号,PROM0~PROM7分别为每个按键的功能程序。   程序清单(设I/O口为P1口)如下:   由此程序可以看出,各按键由软件设置了优先级,优先级顺序依次为0~7。   本节所讲的模块中,在按键按下或弹起时经常会出现一些毛刺,所以在首次检测到输入的值后应添加一个延时程序DELAY。   这个延时程序延时100ms左右,延时后再检测输入的值,如果改变了,则证明此时按键按下或弹起时读出的值是不准确的,再调用延时程序DELAY,延时100ms之后,再继续查看。   本例采
[单片机]
<font color='red'>PIC单片机</font>人机接口模块独立式按键的程序设计
PIC单片机学习方法
为了给前一段时间学习PIC16F616型单片机的一个总结和方便大家的交流,我写了这篇关于PIC单片机的学习心得,都是在看了手册和编程调试后用自己的语言组织的,其中有不足或者有疑问的地方希望大家能及时的给予纠正和批评,提出宝贵的意见. 2.PIC单片机的概述 PIC16F616是一款14引脚、8位的CMOS单片机.采用精简指令集,仅有35条指令,由于采用了数据总线和指令总线分离的哈佛总线结构,使得除少量指令不是单周期之外,大部分的指令都是单周期指令.这样有利于提高单片机的运行速度和执行效率. PIC16F616 这款单片机供电电压可以在2V到5.5V之间,内部集成了一个RC振荡器,频率可以配置成8MHZ或者4MHZ,也可以用外
[单片机]
STC89C52R并行驱动LCD12864(asm/c51)
/*已实验论证 AT89C52与LCD12864 未用BF(忙信号)查询,延时1ms 不能进行BF查询*/ rs bit p2.4 rw bit p2.5 e bit p2.6 psb bit p2.1 res bit p2.3 com equ 30h date equ 31h org 0000h sjmp main org 0030h main:mov p0,#00h mov p2,#10000111b lcall delay setb res mov sp,#60h lcall init lcall page1 clr p1.7 sjmp $ init:mov com,#00110000b;基本
[单片机]
STC89C52R并行<font color='red'>驱动</font><font color='red'>LCD</font>12864(asm/c51)
MMC与PIC单片机接口电路和代码设计
1 概述 Sandisc公司推出的大大容量串行Flash存储器产品——MultiMediaCard(MMC),通常叫作多媒体卡。它的体积比SmartMedia还要小, 不怕冲击,可反复读写记录30万次,驱动电压2.7~3.6V,可变时钟频率范围为0~20MHz,目前常见的容量为64MB/128MB。ATP EleCTRionICs公司已经率先推出了1GB的高容量MMC。除了体积小、寿命长、容量大等特性外,还具备存储区纠错能力;低功耗;5ms内没有接收到命令字后,自动转入休眠状态;支持热插拔等优点。MMC可以格式化为FAT文件系统,便于上位机读写。 2 MMC简介 2.1 引脚排列及功能 根据存储容量的不同,MMC有SMDB和SDM
[单片机]
MMC与<font color='red'>PIC单片机</font>接口电路和代码设计
基于PIC单片机的热水控制器设计
本文介绍了用PIC16C57单片机设计的一种多功能热水控制器,具有自动和手动加水、设置水温、实时显示水量及温度和报警功能,并且具有结构简单、可靠性高、成本低等特点。   关键词: PIC单片机;DS1820数字温度传感器;热水控制器   引言   当前市场上的热水控制器基本上采用双金属片温控,控温精度低、可靠性差、功能单一。随着微电子技术的发展,单片微处理器功能日益增强,价格低廉,在各方面得到广泛应用。在热水控制器中应用单片机,具有设计简单、可靠性高、功能易扩展等优点。   热水控制器主要实现对水温的控制,并满足不同用户的个性需求。因此一个较完善的控制器应具有以下功能:   水温的测量与显示;   水量的测量与显
[单片机]
S3C2440裸机实验(7)----LCD驱动
lcd只要搞清楚了时序其实还是比较简单的,现在LINUX下的LCD驱动如果是像三星的处理器都有很好的支持,只需要修改一些参数就OK了,如果是芯片级的驱动那是比较复杂的,主要是涉及到Framebuffer会让人很抓狂,等完成了裸机的驱动我将会开始写linux的驱动程序编写的文章,请各位网友关注并提出宝贵意见!!! 先来看一下s3c2440中LCD控制器的结构: 从上面结构图可以看出:整个lcd控制器大致可以由REGBANK、LCDCDMA、TIMEGEN、VIDPRCS寄存器几个部分组成。 1。REGBANK由17个可编程的寄存器组和一块256*16的调色板内存组成,它们用来配置LCD控制器的 2。LCDCDM
[单片机]
S3C2440裸机实验(7)----<font color='red'>LCD</font><font color='red'>驱动</font>
PIC单片机读写DS1302
#i nclude pic.h #define uchar unsigned char #define T_CLK RC3 #define T_IO RC4 #define T_RST RC5 unsigned char TDATA; int js; int Order ; bit sci_sign=0; int buf ; void Get1302(uchar *); void RTInputByte(uchar); uchar RTOutputByte(void) ; void W1302(uchar , uchar ); uchar R1302(uchar); void Set1302(uchar*); void sci
[单片机]
0802LCD 4位显示程序 PIC单片机C语言程序
#include xc.h #include pic.h //#include head.h #define uchar unsigned char #define uint unsigned int #pragma config FOSC = XT // Oscillator Selection bits (XT oscillator) #pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled) #pragma config PWRTE = ON // Power-up Timer Enable bit (PWRT ena
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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