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单片机配置字
下一篇:PIC单片机之PIC16F884
推荐阅读最新更新时间:2024-03-16 16:10
设计资源 培训 开发板 精华推荐
- 柔灵科技陈涵:将小型、柔性的脑机接口睡眠设备,做到千家万户
- 微灵医疗李骁健:脑机接口技术正在开启意识与AI融合的新纪元
- USB Type-C® 和 USB Power Delivery:专为扩展功率范围和电池供电型系统而设计
- 景昱医疗耿东:脑机接口DBS治疗技术已实现国产替代
- 首都医科大学王长明:针对癫痫的数字疗法已进入使用阶段
- 非常见问题解答第223期:如何在没有软启动方程的情况下测量和确定软启动时序?
- 兆易创新GD25/55全系列车规级SPI NOR Flash荣获ISO 26262 ASIL D功能安全认证证书
- 新型IsoVu™ 隔离电流探头:为电流测量带来全新维度
- 英飞凌推出简化电机控制开发的ModusToolbox™电机套件
- 意法半导体IO-Link执行器电路板为工业监控和设备厂商带来一站式参考设计