段式LCD液晶顯示屏的玩法

2021-10-01 23:27:15 字數 4329 閱讀 5471

本次任務用華大微控制器hc32l136驅動定製的段式液晶,4com,34seg,1/3偏壓。由於微控制器本身有段式液晶驅動,根據資料手冊可以知道其工作過程及控制方法。

過程分2步:1,配置硬體驅動暫存器。2,根據具體液晶情況,取模,定義聯合結構體。

步驟1可以檢視資料手冊,根據步驟配置寫程式配置程式如下:4com,34個seg從seg0到seg34

步驟2 液晶的具體情況如下2圖

並通過巨集定義對0-f 和u 取模

#define		 char_0		lcdseg_a+lcdseg_b+lcdseg_c\

+lcdseg_d+lcdseg_e+lcdseg_f

#define char_1 lcdseg_b+lcdseg_c

#define char_2 lcdseg_a+lcdseg_b\

+lcdseg_d+lcdseg_e+lcdseg_g

#define char_3 lcdseg_a+lcdseg_b+lcdseg_c\

+lcdseg_d+lcdseg_g

#define char_4 lcdseg_b+lcdseg_c\

+lcdseg_f+lcdseg_g

#define char_5 lcdseg_a+lcdseg_c\

+lcdseg_d+lcdseg_f+lcdseg_g

#define char_6 lcdseg_a+lcdseg_g+lcdseg_c\

+lcdseg_d+lcdseg_e+lcdseg_f

#define char_7 lcdseg_a+lcdseg_b+lcdseg_c

#define char_8 lcdseg_a+lcdseg_b+lcdseg_c\

+lcdseg_d+lcdseg_e+lcdseg_f+lcdseg_g

#define char_9 lcdseg_a+lcdseg_b+lcdseg_c\

+lcdseg_d+lcdseg_f+lcdseg_g

#define char_a lcdseg_a+lcdseg_b+lcdseg_c\

+lcdseg_e+lcdseg_f+lcdseg_g

#define char_b lcdseg_c\

+lcdseg_d+lcdseg_e+lcdseg_f+lcdseg_g

#define char_c lcdseg_a+lcdseg_f+lcdseg_e+lcdseg_d

#define char_d lcdseg_b+lcdseg_c+lcdseg_d\

+lcdseg_e+lcdseg_g

#define char_e lcdseg_a\

+lcdseg_d+lcdseg_e+lcdseg_f+lcdseg_g

#define char_f lcdseg_a+lcdseg_f+lcdseg_e+lcdseg_g

#define char_h lcdseg_b+lcdseg_c+lcdseg_e+lcdseg_f+lcdseg_g

#define char_l lcdseg_d+lcdseg_e+lcdseg_f

從圖一可以看到 基本上每兩個seg能完全配置乙個數碼管,值得一提的是 ,我通過union來管理他們,簡潔明瞭

typedef  union sign_seg5_6;

struct

sign_seg7_8;

struct

sign_seg9_10;

struct

sign_seg12_13;

struct

sign_seg14_15;

struct

sign_seg18_19;

struct

sign_seg19_20;

struct

sign_seg21_22;

struct

sign_seg24_25;

。。。。。。。。等等

}signs;

}undef_lcdbuf;

這裡初始化每個結構體時,要把低為放前邊

我把一些特殊的值單獨賦值,比如「當前」,「金額」。因為這些不是數碼,要根據特殊情況來置位。同樣用到巨集定義。

#define         sign_1_dat  		gstr_lcdbuf.signs.sign_seg5_6.sign_1bc

#define sign_p1_dat gstr_lcdbuf.signs.sign_seg9_10.sign_p1

#define sign_2_dat gstr_lcdbuf.signs.sign_seg12_13.sign_6bc

#define sign_p2_dat gstr_lcdbuf.signs.sign_seg18_19.sign_p2

。。。。。。

#define         dis_point1  		sign_1_dat=1

#define dis_point2 sign_p1_dat=1

#define dis_point3 sign_2_dat=1

#define dis_point4 sign_p2_dat=1

取模和液晶對應起來後,就可以寫基礎的賦值程式了。

賦值程式如下:

#define ptemp_ram0         (volatile uint32_t*)&m0p_lcd->ram0

#define ptemp_ram1         (volatile uint32_t*)&m0p_lcd->ram1

#define ptemp_ram2         (volatile uint32_t*)&m0p_lcd->ram2

#define ptemp_ram3         (volatile uint32_t*)&m0p_lcd->ram3

#define ptemp_ram4         (volatile uint32_t*)&m0p_lcd->ram4

#define ptemp_ram5         (volatile uint32_t*)&m0p_lcd->ram5

#define ptemp_ram6         (volatile uint32_t*)&m0p_lcd->ram6

#define ptemp_ram7         (volatile uint32_t*)&m0p_lcd->ram7

void screen_convert(void) 

lcd_startaddr為暫存器首位址,資料手冊有。把乙個位元組分為高低4位,賦值給連續的兩個顯示暫存器,就可正常顯示乙個數碼管的數字了。接下來介紹怎麼王陣列裡填充數值。
void dis_1char(uchar pub_position,uchar pub_data)

}

這裡要注意gstr_lcdbuf.lcd_lgcbuf[?]的順序和要顯示的位置的關係,和圖一一一對應,比如要顯示0位置時,可根據圖1的 要用9a-9c,k那兩個seg 即gstr_lcdbuf.lcd_lgcbuf[2]。位置3,有點特殊,他分別用到了陣列3的高4位,和陣列4的低四位。位置4-7,高低四位又反過來,所以要加zhihuan(luw_dat);實現高低4為互換。

#define zhihuan(dat)  ((dat>>4)|(dat<<4))

了解基本的顯示程式後,顯示的步驟為:

1,lcd_init()

2,dis_1char(pub_position,pub_data),,還可以有sign_kwh_dat、dis_jin_e、dis_point0之類。

3,screen_convert()

液晶顯示屏怎麼顯示泰文 什麼是LCD液晶顯示屏

lcd 液晶顯示屏主要特點 1.對比度 lcd製造時選用的控制ic 濾光片和定向膜等配件,與面板的對比度有關。對一般使用者而言,對比度能夠達到350 1就足夠了,但在專業領域這樣的對比度還不能滿足使用者的需求。相對crt顯示器輕易達到500 1甚至更高的對比度而言,只有高檔液晶顯示器才能達到這樣的程...

用1602液晶顯示屏實現的時鐘

第一次使用1602液晶顯示屏,所以功能十分簡陋,只有乙個時間走動的功能 include include define dataport p0 sbit rs p2 4 sbit rw p2 5 sbit en p2 6 define rs clr rs 0 define rs set rs 1 de...

LCD1602液晶顯示

include define uchar unsigned char define uint unsigned int define lcd data p0 定義資料線d0 d7 sbit lcd rs p1 0 定義暫存器選擇位 sbit lcd rw p1 1 定義讀寫訊號線位 sbit lcd...