历史上的今天
返回首页

历史上的今天

今天是:2025年08月12日(星期二)

正在发生

2018年08月12日 | PIC单片机驱动LCD断码屏代码生成工具

2018-08-12 来源:eefocus

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 

上贴出完整代码。 

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


推荐阅读

史海拾趣

G-Link Technology公司的发展小趣事

面对日益多样化的市场需求,蜂鸟无线敏锐地意识到定制化服务的重要性。公司开始提供根据客户需求量身定制的无线通信解决方案,这一举措迅速赢得了众多企业和个人的青睐。例如,某大型互联网公司需要为其全球分支机构部署稳定可靠的无线通信网络,蜂鸟无线凭借其在全球范围内的研发和销售网络,迅速响应并提供了个性化的解决方案,不仅满足了客户对通信质量的高要求,还大大缩短了项目周期,赢得了客户的高度赞誉。

Extech公司的发展小趣事

进入新世纪后,Extech公司迎来了新的发展机遇。2000年,公司成为国家第一批863/CIMS系统集成和咨询服务企业,同时也是国家863/CIMS示范应用工程的主流供应商。这一荣誉的获得不仅体现了公司在技术实力和服务能力方面的优势,也为公司未来的发展提供了更广阔的空间。

绿索超容(GreenSource)公司的发展小趣事

1994年,Extech公司推出了国内第一套基于“AutoCAD FOR WINDOWS”的XTMCAD软件,这一创新举措标志着公司在CAD领域迈出了坚实的步伐。XTMCAD软件凭借其先进的技术和易用性,迅速获得了市场的认可,并在同年荣获了国家教委科技进步一等奖。这一荣誉不仅是对Extech公司技术实力的肯定,也为公司未来的发展奠定了坚实的基础。

EOREX公司的发展小趣事

在电子产品质量参差不齐的市场环境下,EOREX公司始终坚持品质至上的原则。他们严格把控生产过程中的每一个环节,确保产品的质量和性能达到最高标准。同时,EOREX还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些举措使得EOREX的产品在市场上赢得了良好的口碑和信赖度,为公司的发展奠定了坚实的基础。

福斯特(FIRST)公司的发展小趣事
使用压电或电容等技术。
Deltrol Controls公司的发展小趣事

在电子行业的早期,Deltrol Controls以其创新的电磁阀产品崭露头角。公司创始人认识到,随着自动化程度的提高,对精确控制流体流动的需求日益增加。于是,他们投入大量研发资源,成功开发出了具有高精度、高可靠性特点的电磁阀。这一创新产品迅速在电子行业获得认可,Deltrol Controls也借此机会逐步扩大了市场份额。

问答坊 | AI 解惑

电赛 NEC的有关资料

本帖最后由 paulhyde 于 2014-9-15 09:15 编辑 电赛 NEC的有关资料  …

查看全部问答>

《模拟CMOS集成电路设计》作者:毕查德.拉扎维_PDF下载

模拟集成电路的设计与其说是一门技术,还不如说是一门艺术。它比数字集成电路设计需要更严格的分析和更丰富的直觉。严谨坚实的理论无疑是严格分析能力的基石,而设计者的实践经验无疑是诞生丰富直觉的源泉。这也正足初学者对学习模拟集成电路设计 ...…

查看全部问答>

嵌入式前途好还是搞j2ee前途好

我搞了一段时间的j2ee开发(时间不长),现在有个机会去搞嵌入式开发,大家说说值得不? 想征求大家的意见…

查看全部问答>

altium designer PCB设计中的全局编辑功能

网上很多网友都反映altium designer在某些方面还是优于10年经典版protel99se ,所以在空闲之余也下载了一个免安装绿化版的altium designer折腾了下。希望altium designer不要追究我使用了盗版的altium designer,只因个人财力有限。折腾不起正版。 ...…

查看全部问答>

用mc34063 做反压扩流

小弟初学,还望各位大师多多指教。我想用34063做一个+18V输入-18V输出的电路,希望输出电流能到2A,纹波要求不高500mV一下就可以。自己用TIP31C照着datasheet上的图搭了个电路,无负载(断开)的时候可以输出18V,然后我用8Ohm的电阻测带载能力,输 ...…

查看全部问答>

大家看看下面的代码有问题吗??

module decoder_74LS138(G1,            G2A,            G2B,          &n ...…

查看全部问答>

编译时出现了一些问题,想请教各位大虾一下

NVIC_InitStructure.NVIC_IRQChannel = EXTI0_IRQChannel;           //设置为EXTI0 但是编译的时候却说“EXTI0_IRQChannel”没有定义,之后我吧其他的在固件库使用手册中给的中断的定义试了一下,都不行 ...…

查看全部问答>

2013全国科技活动周

没有去的朋友,看看图片,看完赶紧去啊,呵呵 复合式土压平衡盾构机 “蛟龙号”深海探测器 南极科考机器人—海燕飞行器机器人 拳击对战机器人 未来工程师 单兵战术机器人 双足人形机器人 3D打印机 机器鱼 排爆机器 ...…

查看全部问答>

基于sensortag的宿舍保姆系统

宿舍请个保姆是不可能的事情,不过我们可以通过蓝牙和单片机的结合设计一个电子宿舍保姆。早上系统闹钟会按时提醒我们起床,之后会通过该模块上的各种传感器给我们指出当前环境情况。再有单片机与继电器相连,很方便的通过蓝牙来遥控宿舍内电灯、风 ...…

查看全部问答>

低年级大学生如何查资料写论文

如果你输入3个关键字“电阻器”Baidu一下,你会发现很多与电阻器有关的信息。电阻器是一种最常用的元器件,虽然看起来简单,如果使用者对电阻器的了解不深入,势必将会影响到电路指标和产品质量。比如,设计一个高精度的温度采集器,则对电阻器的选 ...…

查看全部问答>