日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

歷史上的今天

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

2018年08月12日 | 段式LCD液晶顯示屏的底層驅(qū)動程序

發(fā)布者:Serendipity66 來源: eefocus關(guān)鍵字:段式LCD  液晶顯示屏  底層驅(qū)動 手機看文章 掃描二維碼
隨時隨地手機看文章

本次任務(wù)用瑞賽單片機R7C004驅(qū)動定制的段式液晶,4COM,18seg,1/3偏壓。由于單片機本身有段式液晶驅(qū)動,根據(jù)數(shù)據(jù)手冊可以知道其工作過程及控制方法。


過程分2步:1,配置硬件驅(qū)動寄存器。2,根據(jù)具體液晶情況,取模,定義聯(lián)合結(jié)構(gòu)體。


步驟1可以查看數(shù)據(jù)手冊,根據(jù)步驟配置寫程序配置程序如下:4COM,18個seg從seg0到seg18(出去seg11)


void LCD_Init(void)

{

HB_LCDM1=0;nop();

HB_LCDM0=0x4D;

HB_PFSEG0=0xf0;HB_PFSEG1=0xF7;HB_PFSEG2=0x07;

HB_PFSEG3=0x00;HB_PFSEG4=0x00;HB_PFSEG5=0x00;

HB_PFSEG6=0x00;

HB_LCDC0=0x16;

HB_VLCD=0X16;

us_delay(100);

HB_LCDM1=0x20;

nop();nop();nop();

HB_LCDM1|=0xc0;

HB_ISCLCD=0;

}

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

我們根據(jù)圖1來設(shè)定取模,我把 56 78 910 、、、、兩兩合為一個字節(jié) 8位數(shù)據(jù)。 即8H 7C 7B 7A 7D 7E 7G 7F 這里的7 即代表數(shù)碼管的位置,7代表從右往左數(shù)第2位數(shù)碼管。

這樣H 即為0x80 A為0x10 我用宏定義設(shè)置每一段的數(shù)值

#define      LcdSingMask 0x00

#define         LcdSeg_a 0x10

#define         LcdSeg_b 0x20

#define         LcdSeg_c 0x40

#define         LcdSeg_d 0x08

#define         LcdSeg_e 0x04

#define         LcdSeg_f 0x01

#define         LcdSeg_g 0x02

并通過宏定義對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_r          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

 

#define Char_Row LcdSeg_g

 

#define Char_U LcdSeg_b+LcdSeg_c+LcdSeg_d+LcdSeg_e+LcdSeg_f

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

typedef  union {  

uchar  LCD_LgcBuf[Gcst_LCDBufSize];

struct{

struct

{

unsigned char Sign_7F:1;

unsigned char Sign_7G:1;

unsigned char Sign_7E:1;

unsigned char Sign_7D:1;

unsigned char Sign_7A:1;

unsigned char Sign_7B:1;

unsigned char Sign_7C:1;

unsigned char Sign_8H:1;

}Sign_SEG1_2;

     struct

{

unsigned char Sign_8F:1;

unsigned char Sign_8G:1;

unsigned char Sign_8E:1;

unsigned char Sign_8D:1;

unsigned char Sign_8A:1;

unsigned char Sign_8B:1;

unsigned char Sign_8C:1;

unsigned char Sign_9H:1;

}Sign_SEG3_4;

   struct

{

unsigned char Sign_9F:1;

unsigned char Sign_9G:1;

unsigned char Sign_9E:1;

unsigned char Sign_9D:1;

unsigned char Sign_9A:1;

unsigned char Sign_9B:1;

unsigned char Sign_9C:1;

unsigned char Sign_kWh:1;

}Sign_SEG5_6;

struct

{

unsigned char Sign_Jiner:1;

unsigned char Sign_10H:1;

unsigned char Sign_Yuan:1;

unsigned char Sign_V:1;

unsigned char Sign_6A:1;

unsigned char Sign_6B:1;

unsigned char Sign_6C:1;

unsigned char Sign_7H:1;

}Sign_SEG7_8;

    struct

{

unsigned char Sign_6F:1;

unsigned char Sign_6G:1;

unsigned char Sign_6E:1;

unsigned char Sign_6D:1;

unsigned char Sign_Dian:1;

unsigned char Sign_11H:1;

unsigned char Sign_Shengyu:1;

unsigned char Sign_Dangqian:1;

}Sign_SEG9_10;

struct

{

unsigned char Sign_5A:1;

unsigned char Sign_5B:1;

unsigned char Sign_5C:1;

unsigned char Sign_6H:1;

unsigned char Sign_5F:1;

unsigned char Sign_5G:1;

unsigned char Sign_5E:1;

unsigned char Sign_5D:1;

}Sign_SEG11_12;

struct

{

unsigned char Sign_4A:1;

unsigned char Sign_4B:1;

unsigned char Sign_4C:1;

unsigned char Sign_5H:1;

unsigned char Sign_4F:1;

unsigned char Sign_4G:1;

unsigned char Sign_4E:1;

unsigned char Sign_4D:1;

}Sign_SEG13_14;

struct

{

unsigned char Sign_3A:1;

unsigned char Sign_3B:1;

unsigned char Sign_3C:1;

unsigned char Sign_4H:1;

unsigned char Sign_3F:1;

unsigned char Sign_3G:1;

unsigned char Sign_3E:1;

unsigned char Sign_3D:1;

}Sign_SEG15_16;

struct

{

unsigned char Sign_2A:1;

unsigned char Sign_2B:1;

unsigned char Sign_2C:1;

unsigned char Sign_A:1;

unsigned char Sign_2F:1;

unsigned char Sign_2G:1;

unsigned char Sign_2E:1;

unsigned char Sign_2D:1;

}Sign_SEG17_18;

}Signs;

}UnDef_LcdBuf;

這里初始化每個結(jié)構(gòu)體時,要把低為放前邊。

我把一些特殊的值單獨賦值,比如“當前”,“金額”。因為這些不是數(shù)碼,要根據(jù)特殊情況來置位。同樣用到宏定義。


#define         Sign_Kwh_Dat           GStr_LcdBuf.Signs.Sign_SEG5_6.Sign_kWh

#define         Sign_V_Dat         GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_V

#define         Sign_Yuan_Dat         GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_Yuan

#define         Sign_A_Dat           GStr_LcdBuf.Signs.Sign_SEG17_18.Sign_A

#define         Sign_Shengyu_Dat   GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_Shengyu

#define         Sign_Jiner_Dat     GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_Jiner

#define        Sign_Dianliang_Dat     GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_Dian

#define        Sign_Dangqian_Dat GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_Dangqian

#define         Sign_P4_Dat   GStr_LcdBuf.Signs.Sign_SEG15_16.Sign_4H

#define         Sign_P5_Dat   GStr_LcdBuf.Signs.Sign_SEG13_14.Sign_5H

#define         Sign_P6_Dat   GStr_LcdBuf.Signs.Sign_SEG11_12.Sign_6H

#define         Sign_P7_Dat   GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_7H

#define         Sign_P8_Dat   GStr_LcdBuf.Signs.Sign_SEG1_2.Sign_8H

#define         Sign_P9_Dat   GStr_LcdBuf.Signs.Sign_SEG3_4.Sign_9H

#define         Sign_P10_Dat   GStr_LcdBuf.Signs.Sign_SEG7_8.Sign_10H

#define         Sign_P11_Dat   GStr_LcdBuf.Signs.Sign_SEG9_10.Sign_11H


#define         Dis_Kwh           Sign_Kwh_Dat=1

#define         Dis_Fu_V         Sign_V_Dat=1

#define         Dis_Yuan         Sign_Yuan_Dat=1

#define         Dis_An_A           Sign_A_Dat=1

#define         Dis_Shengyu   Sign_Shengyu_Dat=1 

#define         Dis_Jin_e     Sign_Jiner_Dat=1 

#define         Dis_Dianliang     Sign_Dianliang_Dat=1 

#define         Dis_Dangqian Sign_Dangqian_Dat=1

#define         Dis_Point5   Sign_P4_Dat=1

#define         Dis_Point4   Sign_P5_Dat=1

#define         Dis_Point3   Sign_P6_Dat=1

#define         Dis_Point2   Sign_P7_Dat=1

#define         Dis_Point1   Sign_P8_Dat=1

#define         Dis_Point0   Sign_P9_Dat=1

#define         Dis_Point10   Sign_P10_Dat=1

#define         Dis_Point11   Sign_P11_Dat=1

取模和液晶對應(yīng)起來后,就可以寫基礎(chǔ)的賦值程序了。


根據(jù)瑞薩R7004數(shù)據(jù)手冊介紹,只需王顯示寄存器賦值既可以了。


賦值程序如下:


void Screen_convert(void) 

{

 

*(LCD_StartAddr)=GStr_LcdBuf.LCD_LgcBuf[0]&0X0F;

*(LCD_StartAddr+1)=(GStr_LcdBuf.LCD_LgcBuf[0]>>4);

*(LCD_StartAddr+2)=GStr_LcdBuf.LCD_LgcBuf[1]&0X0F;

*(LCD_StartAddr+3)=(GStr_LcdBuf.LCD_LgcBuf[1]>>4);

*(LCD_StartAddr+4)=GStr_LcdBuf.LCD_LgcBuf[2]&0X0F;

*(LCD_StartAddr+5)=(GStr_LcdBuf.LCD_LgcBuf[2]>>4);

*(LCD_StartAddr+6)=GStr_LcdBuf.LCD_LgcBuf[3&0X0F];

*(LCD_StartAddr+7)=(GStr_LcdBuf.LCD_LgcBuf[3]>>4);

*(LCD_StartAddr+8)=GStr_LcdBuf.LCD_LgcBuf[4]&0X0F;

*(LCD_StartAddr+9)=(GStr_LcdBuf.LCD_LgcBuf[4]>>4);

*(LCD_StartAddr+10)=GStr_LcdBuf.LCD_LgcBuf[5]&0X0F;

*(LCD_StartAddr+12)=(GStr_LcdBuf.LCD_LgcBuf[5]>>4);

*(LCD_StartAddr+13)=GStr_LcdBuf.LCD_LgcBuf[6]&0X0F;

*(LCD_StartAddr+14)=(GStr_LcdBuf.LCD_LgcBuf[6]>>4);

*(LCD_StartAddr+15)=GStr_LcdBuf.LCD_LgcBuf[7]&0X0F;

*(LCD_StartAddr+16)=(GStr_LcdBuf.LCD_LgcBuf[7]>>4);

*(LCD_StartAddr+17)=GStr_LcdBuf.LCD_LgcBuf[8]&0X0F;

*(LCD_StartAddr+18)=(GStr_LcdBuf.LCD_LgcBuf[8]>>4);

}

LCD_StartAddr為寄存器首地址,數(shù)據(jù)手冊有。把一個字節(jié)分為高低4位,賦值給連續(xù)的兩個顯示寄存器,就可正常顯示一個數(shù)碼管的數(shù)字了。接下來介紹怎么王數(shù)組里填充數(shù)值。

void Dis_1char(uchar PuB_position,uchar PuB_data)

{

uchar LuW_Dat;

LuW_Dat=GAuB_char_tbl[PuB_data];

switch(PuB_position)

{

case 0: GStr_LcdBuf.LCD_LgcBuf[2]=LuW_Dat;break;

case 1: GStr_LcdBuf.LCD_LgcBuf[1]=LuW_Dat;break;

case 2: GStr_LcdBuf.LCD_LgcBuf[0]=LuW_Dat;break;

case 3: GStr_LcdBuf.LCD_LgcBuf[3]|=(LuW_Dat&0xf0);GStr_LcdBuf.LCD_LgcBuf[4]|=(LuW_Dat&0x0f);break;

case 4: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[5]=LuW_Dat;break;

case 5: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[6]=LuW_Dat;break;

case 6: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[7]=LuW_Dat;break;

case 7: zhihuan(LuW_Dat);GStr_LcdBuf.LCD_LgcBuf[8]=LuW_Dat;break;

default: break;

}

 

}

這里要注意GStr_LcdBuf.LCD_LgcBuf[?]的順序和要顯示的位置的關(guān)系,和圖一一一對應(yīng),比如要顯示0位置時,可根據(jù)圖1的 要用9A-9C,K那兩個seg 即GStr_LcdBuf.LCD_LgcBuf[2]。位置3,有點特殊,他分別用到了數(shù)組3的高4位,和數(shù)組4的低四位。位置4-7,高低四位又反過來,所以要加zhihuan(LuW_Dat);實現(xiàn)高低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()


關(guān)鍵字:段式LCD  液晶顯示屏  底層驅(qū)動 引用地址:段式LCD液晶顯示屏的底層驅(qū)動程序

上一篇:[STM8L]TAB段式LCD液晶驅(qū)動程序
下一篇:單片機控制TFT液晶屏顯示數(shù)字

推薦閱讀

? ??8月10日下午消息,近日,華創(chuàng)資本正式推出由麻省理工科技評論、DeepTech深科技、華創(chuàng)資本共同出品的《未來版圖》圖書,發(fā)布會邀請了人民郵電出版社社科人文分社副社長恭竟平,DeepTech聯(lián)合創(chuàng)始人陳禺杉,《未來版圖》編定人陳序,深鑒科技創(chuàng)始人姚頌和華創(chuàng)資本合伙人熊偉銘?! ∑渲校铊b科技因7月份正式被美國Xilinx公司收購而廣受關(guān)注,其創(chuàng)始...
簡介 多數(shù)電源應(yīng)用必須減少電磁干擾 (EMI) 以滿足相關(guān)要求,系統(tǒng)設(shè)計人員必須嘗試各種方法來減少傳導和輻射發(fā)射。 電磁兼容性 (EMC) 標準的合規(guī)性(例如,針對多媒體設(shè)備的 CISPR 32,針對汽車應(yīng)用的 CISPR 25)是一項非常重要的任務(wù),與產(chǎn)品開發(fā)成本和上市時間息息相關(guān)。 對于 DC/DC 轉(zhuǎn)換器而言,雖然采用開關(guān)更快的電源器件可以提升開關(guān)頻率并縮小尺寸...
據(jù)electrek報道,特斯拉正在改進自動駕駛可視化技術(shù),以識別車身周圍的其他各種車型。過去一年,特斯拉在改善駕駛可視化方面投入了大量精力。在 Autopilot套件的傳感器和計算機視覺系統(tǒng)的驅(qū)動下,特斯拉能夠?qū)⑵囍車沫h(huán)境呈現(xiàn)在屏幕上?! √厮估目梢暬夹g(shù)已經(jīng)有所改善,能夠越來越準確地展示更多車輛周圍的環(huán)境,其中包括行駛的卡車、SUV、摩托車...
據(jù)報道,韓國聊天機器人解決方案提供商Deepbrain宣布完成4400萬美元B輪融資。該輪融資由韓國產(chǎn)業(yè)銀行領(lǐng)投,投資者還包括IDG Capital China、CH&Partners、Donghun Investment、L&S Venture Capital和Posco Tech Investment等。Deepbrain稱,新融資將被用于擴展全球市場。據(jù)了解,Deepbrain利用AI技術(shù)已經(jīng)推出了“AI虛擬人類”,它是一系列虛擬人類...

史海拾趣

問答坊 | AI 解惑

新奇U盤匯總 令人大飽眼福

新奇巧克力閃盤 看上去惟妙惟肖,確實很像巧克力,用這款U盤的時候,得離孩子遠點   帶液晶屏幕的U盤 此款產(chǎn)品自帶的液晶屏幕不僅可以顯示百分比讀數(shù)還能夠以數(shù)字形態(tài)來標識所剩容量多少    黃金Droid U盤 該款U盤內(nèi)置了1 ...…

查看全部問答∨

C51,怎么統(tǒng)計與分析多路脈沖?(比較初級,請多指教)

C51,怎么統(tǒng)計與分析多路脈沖?(比較初級,請多指教)。 有兩路外部脈沖輸入,脈沖周期相同,同時以他們的高低電平的不同可以取到00,01,10,11,兩路四個組合的值。 請教:這兩路輸入在電路上怎么與C51連接? 程序上又怎么實現(xiàn)脈沖的計數(shù)以及對 ...…

查看全部問答∨

winCE VS2005下C#定時器和串口問題

我用的設(shè)備是MOXA74XX,該設(shè)備能提供多個串口。我的程序目的是要多個串口要同時讀取數(shù)據(jù)。我程序?qū)崿F(xiàn)是:每個串口開啟兩個定時器A、B,定時器A每間隔5秒,發(fā)送一個讀取命令,定時器B則每間隔0.5秒不停的讀串口返回的數(shù)據(jù)。如果定時器B收的數(shù)據(jù)正確 ...…

查看全部問答∨

wince 熱啟動不調(diào)用 OALIoCtlHalInitRTC 函數(shù)來初始化時鐘 ?

平臺 wince6.0 + pxa270 現(xiàn)在發(fā)現(xiàn)一個小問題, 如果短時間關(guān)機或者重啟,發(fā)現(xiàn)啟動過程中 沒有調(diào)用 OALIoCtlHalInitRTC 函數(shù), 這樣進入 os后,時間變?yōu)?2000了 如果是冷啟動的話,它是正常調(diào)用 OALIoCtlHalInitRTC 函數(shù)來從外部rtc獲取時間來初 ...…

查看全部問答∨

Maxim樣片申請 Q&A

1.      -----Maxim提供MR16燈的換代方案嗎?2.      在使用MAX6955器件做LED顯示和鍵盤驅(qū)動時,當我在寫入要顯示的字符時,器件能正常顯示,但是當我讀取鍵盤鍵值時,不能正常讀取,根據(jù)數(shù)據(jù)資料說 ...…

查看全部問答∨

【 信號處理】 ASK編碼器與譯碼器

 ASK編碼器與譯碼器 [ 本帖最后由 jishuaihu 于 2012-1-9 20:53 編輯 ]…

查看全部問答∨

STM8串口通信

對于STM8我想,大家都是奔它的價格去的。確實有不錯的性價比,而且?guī)в序?qū)動庫,支持ST-Link仿真功能。單就與51單片機進行比較,當然是有絕對的優(yōu)勢。不過我個人還是不喜歡它。        不知道是為什么,我對STM32和STM8都沒有 ...…

查看全部問答∨

旗云公里表不走

這車原來是自動擋的現(xiàn)在改成了手動擋了可是現(xiàn)在公里表傳感器的線沒了 哪位大師給分析一下 謝謝…

查看全部問答∨

單片機測量功率因數(shù)

嶄新的新人來求教了。我對單片機C語言不是很了解。只學過C語言和單片機技術(shù)。 在仿真的時候,不能正確顯示LED數(shù)字。一直在變化。功率因數(shù)輸不出去。。。。 求更改、。。 #include #include #include #define   _TH0_TL0_   ...…

查看全部問答∨

【Cadence小技巧學習】 第一帖 鋪地的隔離

首先說明公司用cadence,剛畢業(yè)沒幾個月,剛剛搗鼓這個軟件,所以說的不一定正確。 此貼講的就是數(shù)字地里面隔離出一塊模擬地。 (一)首先把一小塊模擬地鋪上,在鋪大的數(shù)字地,如圖 (二)菜單欄里如此選擇 (三)因為這里是數(shù)字地把模擬地也 ...…

查看全部問答∨
小廣播
設(shè)計資源 培訓 開發(fā)板 精華推薦

最新單片機文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved