本次任務用華大微控制器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\從圖一可以看到 基本上每兩個seg能完全配置乙個數碼管,值得一提的是 ,我通過union來管理他們,簡潔明瞭+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
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...