




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第12章 應用程序編程舉例及驅動程序分析(二) 本章重點:本章重點: DAC應用程序編程舉例; PWM直流電機應用程序編程舉例。12.1 DAC應用程序編程舉例 及驅動程序分析12.1.1DAC硬件基礎 DAC(Digital to Analog Converter,數模轉換器)也稱D/A轉換器,是一種用于將微處理器輸出的數字量,轉換為模擬量的電路模塊。DAC模塊一般是一個單獨的芯片,通過不同的接口電路與微處理器連接。 D/A轉換器 常用的D/A轉換器有8、10、12、14、16bit的,D/A轉換器將微處理器送來的二進制數,轉換為對應的模擬量輸出。 轉換器輸出分為電壓和電流兩種方式,電壓輸出
2、型DAC較為常用。 不同的芯片輸出電壓范圍也不相同,例如有輸出05V、03.3V、-5V5V的。有的DAC芯片,由于片外引腳連接方法不同,輸出電壓也不同。比如依不同的連接方法,對相同的芯片,可以有02.048V、04.096V、-2.048V2.048V幾種輸出。 微處理器與DAC芯片連接,依不同的DAC芯片,有不同的連接方法。 常用的有通過并行接口連接、SPI(Serial Peripheral Interface,串行外設接口)連接等多種方式。 由微處理器送往DAC芯片的二進制數,也依DAC芯片的不同,使用不同的編碼格式,常用的有原碼、補碼、BCD碼等格式。 MAX504 D/A轉換器簡介
3、 MAX504芯片,是一款低功耗、電壓輸出型10位數模轉換器。 片內操作可以使用單一的+5V供電電源,也可以使用5V及0V到-5V兩路供電電源。 MAX504芯片與微處理器連接采用SPI接口,串行傳輸數據。 在微處理器發出片選信號CS#有效期間,MAX504的SPI端口收到的2字節數據中,第1字節最高4位不使用,第2字節最低2位必須為00b,其余10位進行D/A轉換。 轉換輸出的電壓,依芯片引腳的不同連接方法,有三種: 02.048V; 04.096V; -2.048V2.048V。 圖12.1 MAX504芯片內部功能模塊表12.1 MAX504芯片引腳功能描述引腳名稱功能描述引腳名稱功能描
4、述1BIPOFF雙極性的偏移/增益電阻8AGND模擬地2DIN串行數據輸入9REFIN參考輸入3CLR#清除。異步設置DAC寄存器為010REFOUT參考輸出,2.048V4SCLK串行時鐘輸入11VSS負電源5CS#片選,低電平有效12VOUTDAC輸出6DOUT串行數據輸出13VDD正電源7DGND數字地14RFB反饋電阻 圖12.2是MAX504芯片引腳的一種連接方法(圖中沒畫出與微處理器的連接),對應的D/A轉換輸出電壓范圍為04.096V。表12.2對應圖12.2,表示輸入的10位二進制數與轉換輸出電壓的對照關系。 圖12.2 輸出電壓范圍為04.096V引腳的連接表12.2 10位
5、二進制數對應的轉換輸出電壓輸入(bit)輸出(V)輸入(bit)輸出(V)1111 1111 11(00)2*VREFIN*1023/10240111 1111 11(00)2*VREFIN*511/10241000 0000 01(00)2*VREFIN*513/10240000 0000 01(00)2*VREFIN*1/10241000 0000 00(00)2*VREFIN*512/10240000 0000 00(00)012.1.2DAC應用程序編程舉例(S3C2410A) 芯片連接 圖12.3的連接方法使MAX504芯片D/A轉換輸出電壓范圍為04.096V,輸出信號AVOUT0
6、被引到J1001端子,供測量使用。 圖12.3 系統中MAX504芯片連接舉例 驅動程序模塊加載 驅動程序模塊名為s3c2410-exio.o,用insmod命令加載。 應用程序編程舉例 在下面的例12.1中,程序首先打開“/dev/exio/0raw”字符設備文件, 打開成功后,進入for循環: 循環中提示輸入一個浮點數,范圍在0.0-4.096之間,超過這個范圍則程序結束; 然后C語言庫函數scanf(),等待并從標準輸入設備讀入一個浮點數; 輸入浮點數如果不在范圍內,則退出for循環; 輸入浮點數內在范圍內則把輸入浮點數變成0-1023之間的一個整數,由ioctl()系統調用函數,使得驅
7、動程序將這個整數通過SPI接口送到DAC; 然后在標準輸出設備顯示這個整數對應的電壓值;重復循環中的語句。 程序編譯后,需要通過mount命令掛接NFS,然后在目標板執行這個文件。 執行過程中用戶在標準輸入設備輸入的浮點數,表示的是希望DAC轉換后得到的電壓值,可以使用萬用表在目標板相應端子測量DAC的輸出電壓,進行驗證。 例如用戶輸入1.0,則DAC輸出電壓為1.0V;用戶輸入2.5,則DAC輸出電壓為2.5V。 【例12.1】DAC應用程序舉例。 (代碼見P418) 12.1.3DAC驅動程序主要代碼分析(S3C2410A) 模塊的初始化函數、清除函數 模塊的初始化函數 模塊的初始化函數格
8、式如下: int_init s3c2410_exio_init(void) /*初始化代碼*/ module_init(s3c2410_exio_init); /*說明內核初始化函數所在位置*/ 模塊的初始化函數是由insmod命令對應的程序執行時調用的。初始化函數內部對SPI占用的I/O端口初始化、設置SPI操作模式,使SPI可用。 執行初始化函數: 建立一個/dev/exio/0raw字符設備文件; 注冊s3c2410_exio_fops結構; 得到主設備號。 模塊的清除函數 模塊的清除函數格式如下: void _exit s3c2410_exio_exit(void) /*清除代碼*/
9、module_exit(s3c2410_exio_exit); /*用于幫助內核找到清除函數*/ 模塊的清除函數是由rmmod命令對應的程序執行時調用的。內部的清除代碼刪除了/dev/exio/0raw字符設備文件,刪除了exio子目錄,釋放了主設備號及清除初始化函數向系統注冊的內容。 s3c2410_exio_fops結構及相關函數 結構 結構內容如下: static struct file_operations s3c2410_exio_fops = owner:THIS_MODULE,open:s3c2410_exio_open,ioctl: s3c2410_exio_ioctl,rel
10、ease:s3c2410_exio_release, ; s3c2410_exio_open函數和s3c2410_exio_release函數 s3c2410_exio_open函數內部沒有對設備的具體操作,只是執行語句MOD_INC_USE_COUNT,然后輸出“s3c2410 EXIO device open!”,返回。 s3c2410_exio_release函數內部也沒有對設備的具體操作,只是執行語句MOD_DEC_USE_COUNT,然后輸出設備釋放信息,返回。 s3c2410_exio_ioctl函數 該函數內部首先判斷是對DAC寫入、還是清除操作,然后轉向對應的函數,代碼如下:
11、#define DA_IOCTRL_WRITE 0 x10 #define DA_IOCTRL_CLR 0 x12 static int s3c2410_exio_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned long arg) switch(cmd) /*write da 0 with (*arg) */ case DA_IOCTRL_WRITE: return da_write( (const char *)arg); /*clear da (*arg) */ case DA_IOCTRL
12、_CLR: return da_clear(); default: printk(Wrong ioctl arg); return 0; 上述da_write函數定義的代碼,在下面單獨列出;da_clear函數定義的代碼較為簡單,不再列出。 關于da_write函數代碼含義說明如下: 應用程序通過buffer參數傳遞過來的數據,是將要輸出到DAC的數據,范圍在0-1023,將通過微處理器SPI端口送DAC。在da_write函數內部,將buffer數據拷貝到內核空間buf變量中,4字節長度。 將buf中的數轉換成整型數,送value,左移2位,這是由于DAC最低2位要求為00b。 調用da_e
13、nable函數,在這個函數中,將微處理器引腳GPG3設置為輸出狀態,并輸出低電平,作為DAC片選有效信號,詳細內容請參閱參考文獻1。 微處理器向SPI0端口先送value高8位數,再送低8位數,SPI0端口將這16位數順次送DAC。有關SPI端口使用技術,見參考文獻1。 調用da_disable函數,使GPG3輸出高電平,DAC片選信號處于無效狀態。 以下列出的是da_write函數代碼、da_enable和da_disable函數代碼: (p412)12.2 PWM直流電機應用程序編程舉例及 驅動程序分析 在下文的例12.2中,直流電機由S3C2410片內的PWM定時器控制轉向和轉速。 PW
14、M(Pulse Width Modulation)稱為脈沖寬度調制,簡稱脈寬調制,指的是當脈沖信號的頻率固定時,對脈沖信號高電平持續時間進行調制,即改變脈沖信號高電平持續的時間。 脈沖信號高電平持續時間與脈沖信號周期時間(包括高、低電平持續時間)之比,稱為占空比。 PWM定時器的輸出端,經過功率放大電路連接到直流電機。 通過對脈沖寬度進行調制,可以控制直流電機的運行速度,占空比越高,速度越快; 通過對脈沖寬度進行調制還可以控制直流電機線圈電流的流過方向,改變直流電機軸的轉動方向。12.2.1PWM直流電機(S3C2410A) 驅動電流可以雙向流動的H橋電路 圖12.4是一個驅動電流可以雙向流動
15、的H橋(H-bridge)電路實例。 圖12.4電路中,驅動電流可以從左向右流過電機線圈,也可以從右向左流過電機線圈,從而能夠改變電機軸的轉動方向。 圖12.4 驅動電流可以雙向流動的H橋電路 在圖12.4中,晶體管Q3與Q2為一組,Q1與Q4為另一組。某一時刻只能有一組導通,另一組截止,不能兩組同時導通。 例如Q3與Q2導通,Q1與Q4截止時,電流從Q3由右到左流過線圈,再經過Q2流向地,這時電機軸假定為順時針方向轉動。轉速與加在Q3和Q2上的脈沖信號占空比有關,占空比越大,轉速越快。 目標板直流電機驅動電路實例 圖12.5是某目標板H橋驅動電路實例圖,該電路能夠驅動電機軸順時針方向轉動,改
16、變轉速;逆時針方向轉動,改變轉速。 (圖見p424) 圖12.5中輸入信號,分別連接到定時器輸出TOUT0和TOUT1,當編程設置使用死區功能時,假如不考慮死區區間的影響,TOUT1信號可以看作是TOUT0信號經過反相得到的。因此這兩個信號總是一個為高電平,另一個為低電平。 當TOUT0為高電平、TOUT1為低電平時,假定不考慮反向電動勢電流對電路的影響,那么三極管Q1601和Q1609導通,電流從端子J1601引腳2流入直流電機,經過直流電機從引腳1流出。 當TOUT0為低電平,TOUT1為高電平時,電流反方向流經直流電機。12.2.2 編譯、加載驅動程序模塊(S3C2410A) 編譯直流電
17、機模塊 執行以下命令,進入Main Menu的Character devices菜單,選擇S3C2410 DC MOTOR作為加載模塊,如圖12.6、12.7所示。 rootvm-dev /# cd /arm2410cl/kernel/linux-2.4.18-2410cl rootvm-dev linux-2.4.18-2410cl# make menuconfig 圖12.6 從主菜單中選擇字符設備 圖12.7 從字符設備中選擇S3C2410 DC MOTOR 然后執行以下命令編譯內核模塊:rootvm-dev linux-2.4.18-2410cl# make deprootvm-dev
18、 linux-2.4.18-2410cl# makerootvm-dev linux-2.4.18-2410cl# make modules 執行以下命令,查看直流電機模塊編譯的結果: rootvm-dev linux-2.4.18-2410cl# ls arm2410cl/kernel/linux-2.4.18-2410 cl/drivers/char /arm2410cl/kernel/linux-2.4.18-2410cl/drivers/char/s3c2410-dc-motor.c /arm2410cl/kernel/linux-2.4.18-2410cl/drivers/char/
19、s3c2410-dc-motor.o 其中s3c2410-dc-motor.c是驅動程序源代碼。 可以將s3c2410-dc-motor.o模塊,拷貝到應用程序目錄/arm2410cl/exp/basic /09_dcmotor目錄。 加載直流電機模塊 用insmod命令在目標板minicom窗口,加載驅動模塊。 另外,在09_dcmotor目錄下的子目錄drivers中,已經保存了事先編譯過的驅動模塊,名稱為dc-motor.o。用戶也可以不進行前述的編譯過程,直接加載這個模塊。12.2.3PWM直流電機應用程序編程舉例 (S3C2410A) PWM直流電機應用程序編程舉例 在下述例12.2
20、中,程序首先打開PWM直流電機對應的文件/dev/dcm/0raw,如果打開失敗,返回值為1;打開成功繼續執行。 在for語句循環中,提示用戶在終端輸入-511到+511之間的一個整數,如果輸入數據出了這個范圍,則退出循環。 如果輸入數據在-511-50之間,電機軸逆時針方向轉動; 輸入數據在-49+49之間電機軸不轉動(不同設備可能有差異); 輸入數據在+50+511之間,電機軸順時針方向轉動。 輸入數據的絕對值越大,轉速越快。如果輸入了非數字字符,會導致程序運行錯誤,可以用Ctrl+c鍵中止運行的程序。 函數ioctl()將用戶輸入的數值乘以factor,傳送到驅動程序,驅動程序參考這個數
21、據設置TCMPB0的值,控制電機軸轉動方向、速度。 【例12.2】PWM直流電機應用程序舉例。 (代碼見p426) PWM直流電機應用程序分析 在驅動程序中,計數緩沖寄存器TCNTB0的值設為固定值16384,因此定時器0的輸出頻率不變。上述應用程序中,用戶輸入的合法值-511+511,乘factor后,傳送給驅動程序,驅動程序通過如下計算設置比較緩沖寄存器TCMPB0的值,實現脈寬調制,控制電機軸轉動方向、轉速。 TCMPB0=DCM_TCNTB0/2+v=8192+v 式中v是由用戶程序傳遞給驅動程序的參數,值為i*factor,factor的值為16。 當TCNTB0=16384,用戶不
22、同的輸入值對TCMPB0的影響見表12.3(p427)。12.2.4PWM直流電機驅動程序主要代碼分析 (S3C2410A) PWM直流電機驅動程序名為:s3c2410-dcmotor.c。 宏定義和結構 s3c2410_dcm_open函數及相關函數 s3c2410_dcm_ioctl函數及相關函數 s3c2410_dcm_release函數 (p428-429)12.3 LED應用程序編程舉例及 驅動程序分析12.3.1 七段LED概述 七段LED 典型的七段LED外觀及內部連接如圖12.8所示,通常分為共陽極、共陰極兩種類型。七段LED中每一段(筆畫)內部有一個發光二極管,當有一定的電流
23、通過時,該二極管發光,稱為點亮。當切斷通過的電流時,該二極管不發光,稱為熄滅。當發光二極管以一定的頻率亮、滅時,如果熄滅的時間比較短,人眼看到的仍然覺得是一直點亮的狀態。圖12.8 七段LED外觀及內部連接示意圖 許多七段LED內部實際上有8個發光二極管,其中一個用于顯示小數點。 共陽極七段LED指的是,8個發光二極管的陽極連接在一起,發光二極管的陰極a、b、c、d、e、f、g、DP分別連接到不同的段碼驅動電路。 共陽極七段LED中的某1段對應的發光二極管點亮時,要求陽極接高電平,要點亮的筆畫對應的發光二極管陰極接低電平,其余陰極接高電平。 共陽極七段LED的陽極通常連接+5V,或者連接到位碼
24、驅動電路。 當位碼驅動電路輸出高電平時,點亮這1位七段LED,具體點亮哪一段,取決于8個發光二極管的陰極,所連接的段碼驅動電路輸出的是低電平還是高電平。 共陰極七段LED指的是,8個發光二極管中的陰極連接在一起,發光二極管的陽極a、b、c、d、e、f、g、DP分別連接到不同的段碼驅動電路。 共陰極七段LED中的某1段對應的發光二極管點亮時,要求陰極接低電平,要點亮的筆畫對應的發光二極管的陽極接高電平,其余陽極接低電平。 共陰極七段LED的陰極通常連接地,或者連接到位碼驅動電路。當位碼驅動電路輸出低電平時,點亮這1位七段LED,具體點亮哪一段,取決于8個發光二極管的陽極,所連接的段碼驅動電路輸出
25、的是高電平還是低電平。 七段LED段碼數值 共陰極、共陽極七段LED顯示同一個數字對應的段碼數值不同,詳見表12.4的左半部分和右半部分(p431)。 另外表12.6前面部分表示十進制數09對應的段碼數值,后面部分是擴展到十六進制數,A、b、C、d、E、F對應的段碼數值。 硬件譯碼器驅動方法 硬件譯碼器驅動如圖12.9所示。圖12.9 硬件譯碼器驅動示意圖 在圖12.9中,CPU將要顯示的數(09),以BCD碼格式送74LS273鎖存器,鎖存器的輸出連接到7447譯碼器驅動器的DCBA端,7447內部進行BCD碼到七段段碼的譯碼,7447輸出段碼經過限流電阻,連接到七段LED,圖12.9是1位
26、共陽極七段LED與驅動電路連接示意圖。 軟件譯碼驅動方法 軟件譯碼驅動方法,指的是將要顯示的數,由軟件根據表12.4的內容,將其轉換成共陰極或共陽極LED的段碼數值,然后CPU輸出這個段碼數值到帶鎖存器的芯片,再經過驅動電路,傳送到LED,如圖12.10所示。圖12.10 經軟件譯碼后的驅動示意圖 有多位七段LED時,軟件譯碼驅動方法可以分為靜態驅動和動態驅動兩種。后面講述的例12.3采用了靜態驅動方法。 靜態驅動指的是,每1位七段LED,有一個單獨的段碼鎖存器和段碼驅動電路。動態驅動指的是,幾位七段LED,共用一個段碼鎖存器和段碼驅動電路,點亮某一位七段LED時,這一位的位碼電路允許流過電流
27、,其他的位碼電路不允許流過電流,驅動程序輪流點亮每一位七段LED。12.3.288點陣LED顯示概述 88點陣LED顯示器 88點陣LED顯示器,也簡稱88點陣LED、LED模塊。 88點陣LED顯示器外觀,如圖12.11所示。圖12.11 88點陣LED顯示器外觀示意圖 88點陣LED顯示器內部連接,如圖12.12所示。圖12.12 88點陣LED顯示器內部連接 圖12.11和圖12.12表示單色88點陣LED顯示器,其中每個發光二極管作為1個像素。在一個封裝模塊中有8行、8列共64個發光二極管。當行線、列線與驅動電路連接時,每個發光二極管可以單獨點亮或熄滅。 在圖12.12(b),每一行8
28、個發光二極管的陽極連接在一起,每一列的8個發光二極管的陰極也連接在一起。 88點陣LED顯示方法 假定從圖12.12(b)左邊第1列開始顯示,依次顯示第2列、第3列第8列,動態顯示的方法如下(L表示低電平,H表示高電平): 顯示第1列時,各條列線上的驅動電平從左到右依次為L、H、H、H、H、H、H、H。換句話說,當不同的行線上驅動電平為H或L時,由于只有列線1是低電平,因此允許行線為H電平連接的LED流過電流(點亮),而行線為L電平連接的LED無電流流過(熄滅)。其他列線由于都是H電平,這些列線上的LED均無電流流過。 顯示第2列時,各條列線上的驅動電平從左到右依次為H、L、H、H、H、H、H
29、、H,這時8條行線送出的高、低電平,應該與第2列8個LED的亮、滅對應。這時只有第2列上行線連接高電平的LED點亮。 顯示第3列時,各條列線上的驅動電平從左到右依次為H、H、L、H、H、H、H、H,行線送出的高、低電平,應該與第3列8個LED的亮、滅對應。然后以同樣的方法,依次驅動第4列、第5列、第6列、第7列、第8列上的LED亮或滅。 驅動顯示第8列以后,再重新驅動顯示第1列,依次循環。 上述驅動顯示方法稱為動態顯示。動態顯示要求行線、列線驅動電平有效地配合,即某一條列線為低電平時,行線送出的是這一列8個LED對應亮、滅的高、低電平。 顯示數據及字模 圖12.13給出的是,例12.3中目標板
30、88點陣LED顯示器與顯示數據的一種對應關系。 圖12.13 88點陣LED顯示器與顯示數據的對應關系 在圖12.13中,8字節數據分別存放在CPLD低位地址A4:A1為00000111的單元中,并且最低位地址A0一直為0。 這8個單元中保存的8字節數據,對應8列LED中每個LED的亮、滅。 二進制數1對應亮,0對應滅。 左起0000地址中第1字節數據b7b0,與第1列8個LED對應,地址0111中的1字節數據,與第8列8個LED對應。 1字節數據中的b7表示數據的最高位,對應最下面一個LED;b0表示數據的最低位,對應最上面一個LED。 例如:8字節數據(從地址0000開始存放)分別是: 1
31、,1,1,1,1,1,1,1,表示88點陣LED最上面一行8個LED點亮; 1,2,4,8,16,32,64,128,表示88點陣LED的左上、右下對角線上8個LED點亮; 1,3,7,15,31,63,127,255,表示88點陣LED的左上、右下對角線及對角線以上的LED點亮。 圖12.14 數字1、2、3及字母A的字模 圖12.14中,(a)、(b)、(c)、(d)分別是數字1、2、3及字母A的字模,各自對應的8字節16進制數分別是: 0 x40,0 x42,0 x7f,0 x7f,0 x40,0 x40,0 x00,0 x00,對應數字1; 0 x62,0 x73,0 x59,0 x4
32、9,0 x6f,0 x66,0 x00,0 x00,對應數字2; 0 x22,0 x63,0 x49,0 x49,0 x7f,0 x36,0 x00,0 x00,對應數字3; 0 x7c,0 x7e,0 x13,0 x13,0 x7e,0 x7c,0 x00,0 x00,對應字母A。 要使88點陣LED顯示不同的字符,需要在應用程序中定義字模,然后將字模中8字節數據送到圖12.13所示的CPLD對應的單元。 12.3.3CPLD與七段LED、88點陣LED連接舉例 (S3C2410A) CPLD簡介 CPLD(Complex Programmable Logic Device,復雜可編程邏輯器
33、件)是由PAL(Programmable Array Logic,可編程陣列邏輯)和GAL(Generic Array Logic,通用陣列邏輯)器件發展而來,相對而言結構較為復雜、集成度較高,屬于大規模集成電路范圍。CPLD是一種集成電路制造完成后,由用戶根據自己的需求,自行構造邏輯功能的數字集成電路。用戶對CPLD進行設計的方法是借助集成開發軟件平臺,根據原理圖,采用硬件描述語言等方法,生成相應的目標文件,通過下載電纜(“在系統”編程),將代碼傳送到目標CPLD芯片中。 CPLD與微處理器的連接 作者使用的目標板,CPLD芯片與微處理器通過低8位數據總線連接。CPLD片選信號,使用了內存儲
34、器控制器bank1選擇信號nGCS1。因此在驅動程序模塊中還要設置允許使用nGCS1及bank1對應的參數。 S3C2410微處理器存儲器地址空間與I/O地址空間,采用了統一編址的方法,因此允許CPLD芯片使用nGCS1作為片選信號。 允許使用nGCS1及設置bank1對應參數的方法,詳見參考文獻1。 CPLD與七段LED的連接 CPLD與七段LED的連接見圖12.15。圖12.15 CPLD與七段LED連接圖 如圖12.15所示,2個七段LED分別顯示十位數和個位數,它們均采用共陽極連接,陽極連接到3.3V電源,圖中用VDD33表示。 每個七段LED的段碼,通過電阻連接到CPLD的不同輸出引
35、腳,這些輸出引腳在CPLD內部連接到兩個鎖存器的輸出。 驅動程序通過向CPLD指定地址分別傳送十位數和個位數的段碼,CPLD內部自動控制通過鎖存器輸出段碼。 CPLD物理地址為0 x08000110單元,保存十位數(高位)LED的段碼; CPLD物理地址為0 x08000112單元,保存個位數(低位)LED的段碼。 CPLD以靜態方式驅動2個七段LED。 寫入CPLD兩個物理地址單元的數值,與七段LED段碼的關系,表示如下:bit76543210定義DPgfedcba CPLD與88點陣LED的連接圖12.16 CPLD與88點陣LED的連接 如圖12.16所示,從CPLD輸出引腳LEDMA7
36、LEDMA0輸出的行掃描信號,分別連接到88點陣LED行線的A7A0。 從CPLD輸出引腳LEDMK7LEDMK0輸出的列掃描信號,通過74HC245芯片分別連接到88點陣LED列線的K7K0。 驅動程序通過向CPLD指定地址,分別傳送第1列(左起),及第2、3、4、5、6、7、8列LED顯示對應的數據,之后CPLD會自動實現行、列動態掃描輸出,點亮/熄滅處在不同行、列上的LED。 送往CPLD的數據,每一列8個LED對應1字節數據,8列LED對應8字節數據。 1字節數據中的最高位對應這一列最下面的一個LED;1字節數據中的最低位對應這一列最上面的一個LED;某1位為1點亮LED;為0熄滅。
37、CPLD物理地址0 x08000100單元,保存最左邊一列LED對應的1字節數據; CPLD物理地址0 x08000102單元,保存左起第2列LED對應的1字節數據; CPLD物理地址每次加2的單元,順序保存下一列LED對應的1字節數據; CPLD物理地址0 x0800010E單元,保存最右邊一列LED對應的1字節數據。 12.3.4 七段LED、88點陣LED應用程序編程舉例 (S3C2410A) 在下述例12.3中,應用程序首先打開七段LED及88點陣LED設備對應的/dev/led/0raw文件,然后熄滅兩個七段LED。在for循環中,通過ioctl()函數,將兩個七段LED的不同段碼數
38、值,送往驅動程序(模塊),實現七段LED的顯示。 程序每循環一次,通過getchar()函數,等待從終端鍵盤上(標準輸入)輸入一個字符,控制循環過程。 Linux從終端鍵盤輸入一個字符,必須在輸入一個字符后按下回車鍵(Linux系統按下回車鍵只產生一個換行字符,不產生回車字符),這個字符連同換行字符才能傳送給應用程序。 因此用戶在鍵盤輸入一個字符并且按下回車鍵,應用程序中是通過執行2次getchar()函數來完成讀入的。 兩個七段LED用到的段碼數值,由數組LEDCODE16表示,具體含義可參考表12.4。 應用程序運行時,兩個七段LED順次顯示:0F、1E、2d,。 應用程序中另一個for循環,通過write()函數,將88點陣LED顯示對應的數據,送往驅動程序。雖然write()函數每次傳送10字節,但是只有前面的8字節與88點陣的8列LED有對應關系。 在數組dd_data1610中
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學生安全自律協議3篇
- 擦洗劑的成分與清潔效果對比研究考核試卷
- 審計證據收集與評估考核試卷
- 火工品生產過程中的安全生產標準化實施考核試卷
- 纖維素纖維的生態友好型加工技術與設備考核試卷
- 環境污染治理區域合作考核試卷
- 2025標準租房合同范本下載
- 2025巨型建設項目合同范本
- 2025辦公租賃合同(財產租賃合同)
- 房屋委托居間服務合同書范例
- LongleyRice無線電波傳輸模型
- 幕墻工程重要環境因素及采取的措施方案
- 我的家鄉煙臺課件
- 二級板式換熱器熱網疏水回收的優勢
- 2021屆高考英語887核心詞(打印、詞頻、出處、例句、背誦)
- 國外幾家氣壓盤式制動器的比較
- GB/T 20647.9-2006社區服務指南第9部分:物業服務
- 培養初中學生的數學閱讀理解能力
- 卒中相關肺炎的指南解讀
- 六下統編版復習2形近字
- 硒知識科普手冊
評論
0/150
提交評論