![c語言的單片機(jī)模塊化編程初階入門_第1頁](http://file4.renrendoc.com/view3/M03/13/3B/wKhkFmY6ruOANORXAAJXJscOsJI828.jpg)
![c語言的單片機(jī)模塊化編程初階入門_第2頁](http://file4.renrendoc.com/view3/M03/13/3B/wKhkFmY6ruOANORXAAJXJscOsJI8282.jpg)
![c語言的單片機(jī)模塊化編程初階入門_第3頁](http://file4.renrendoc.com/view3/M03/13/3B/wKhkFmY6ruOANORXAAJXJscOsJI8283.jpg)
![c語言的單片機(jī)模塊化編程初階入門_第4頁](http://file4.renrendoc.com/view3/M03/13/3B/wKhkFmY6ruOANORXAAJXJscOsJI8284.jpg)
![c語言的單片機(jī)模塊化編程初階入門_第5頁](http://file4.renrendoc.com/view3/M03/13/3B/wKhkFmY6ruOANORXAAJXJscOsJI8285.jpg)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
例如:LCD1602液晶模塊應(yīng)用要求:LCD1602字符型液晶顯示實(shí)驗(yàn)。在屏幕的第一行顯示“224166320@qq”,第二行那么顯示“Tel:1308645xxxx”[實(shí)驗(yàn)原理——LCD根底知識]LCD顯示器是一種利用液晶的扭曲/向列效應(yīng)制成的新型顯示器。具有體積小、重量輕、功耗低、抗干擾能力強(qiáng)等優(yōu)點(diǎn),因而在單片機(jī)系統(tǒng)中被廣泛應(yīng)用。[實(shí)驗(yàn)原理——LCD結(jié)構(gòu)及工作原理]LCD本身不發(fā)光,是通過借助外界光線照射液晶材料而實(shí)現(xiàn)顯示的被動(dòng)顯示器件。向列型液晶材料被封裝在上、下兩片導(dǎo)電玻璃電極之間,液晶分子平行排列,上下扭曲90度,外部入射光線通過上偏振片后形成偏振光,該偏振光通過平行排列的液晶材料后被旋轉(zhuǎn)90度,再通過與上偏振片垂直的下偏振片,被反射極反射過來,呈透明狀態(tài)。假設(shè)在上、下電極之間加一定電壓,在電場的作用下迫使加在電極局部的液晶分子轉(zhuǎn)成垂直排列,其旋光作用也隨之消失,致使從上偏振片入射的偏振光不旋轉(zhuǎn),光無法通過下偏振片返回,呈黑色。去掉電壓后,液晶分子又恢復(fù)其扭轉(zhuǎn)結(jié)構(gòu)。實(shí)驗(yàn)原理——SMC1602A液晶模塊引腳功能實(shí)驗(yàn)原理——液晶控制器接口說明實(shí)驗(yàn)原理——液晶控制器接口說明實(shí)驗(yàn)原理——液晶控制器接口說明實(shí)驗(yàn)原理——液晶控制器接口說明實(shí)驗(yàn)原理——1602液晶控制器自帶標(biāo)準(zhǔn)字庫每一個(gè)字符都有一個(gè)固定的代碼,比方“A”的代碼是41H,顯示時(shí)模塊把41H中的點(diǎn)陣字符圖形顯示出來,就能看到字母“A”。#include<AT89x52.h>#include<INTRINS.h>#defineucharunsignedchar#defineuintunsignedint#defineDOUTP0sbitrs=P2^0;sbitrw=P2^1;sbite=P2^7;codeuchartab1[]={0x32,0x32,0x34,0x31,0x36,0x36,0x33,0x32,0x30,0x40,0x71,0x71,0x2e,0x63,0x6f,0x6d,0xff,};codeuchartab2[]={0x54,0x65,0x6c,0x3a,0x20, 0X31,0X33,0x30,0x38,0x36,0x34,0x35,0x78,0x78,0x78,0x78,0xff,};//延時(shí)函數(shù)voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}參考例如程序〔程序?qū)懺谝粋€(gè)C文件中〕//以下為讀忙狀態(tài)的時(shí)序程序unsignedcharread_status(void){unsignedcharLCD_Status;DOUT=0xff;rs=0;rw=1;e=1;delayms(1);LCD_Status=DOUT;e=0;returnLCD_Status;}//以下為寫命令的時(shí)序程序voidwrite_com(unsignedcharcmd){while((read_status()&0x80)==0x80);rs=0;rw=0;e=0;P0=cmd;e=1;delayms(1);e=0;}//以下為液晶初始化程序voidlcd_ini(void){write_com(0x38);delayms(1);write_com(0x01);delayms(1);write_com(0x06);delayms(1);write_com(0x0c);delayms(1);}//以下為寫數(shù)據(jù)的時(shí)序程序voidwrite_dat(unsignedchardat){while((read_status()&0x80)==0x80);rs=1;rw=0;e=0;P0=dat;e=1;delayms(1);e=0;}//以下為主函數(shù)voidmain(void){uchari=0;lcd_ini();write_com(0x80);//設(shè)置第一行數(shù)據(jù)地址指針,為80H+地址碼
delayms(1);while(tab1[i]!=0xff){write_dat(tab1[i]);i++;delayms(1);}i=0;write_com(0xc0);//設(shè)置第二行數(shù)據(jù)地址指針,為80H+地址碼
delayms(1);while(tab2[i]!=0xff){write_dat(tab2[i]);i++;delayms(1);}i=0;while(1);}參考程序://LCD1602.C//液晶控制與顯示程序#include<reg51.h>#include<intrins.h>sbitRS=P2^0;//存放器選擇位,將RS位定義為P2.0引腳sbitRW=P2^1;//讀寫選擇位,將RW位定義為P2.1引腳sbitEN=P2^2;//使能信號位,將E位定義為P2.2引腳//延時(shí)函數(shù)voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}程序可作如下修改,寫法如下://忙檢測函數(shù)unsignedcharbusy_check(void){unsignedcharLCD_Status;//定義忙狀態(tài)變量
RS=0;RW=1;EN=1;delayms(1);LCD_Status=P0;//讀取忙狀態(tài)
EN=0;returnLCD_Status;//返回忙狀態(tài)}//寫命令voidwrite_LCD_Command(unsignedcharcmd){while((busy_check()&0x80)==0x80);//等待忙狀態(tài)結(jié)束
RS=0;RW=0;EN=0;P0=cmd;EN=1;delayms(1);EN=0;}//寫數(shù)據(jù)voidwrite_LCD_data(unsignedchardat){while((busy_check()&0x80)==0x80);RS=1;RW=0;EN=0;P0=dat;EN=1;delayms(1);EN=0;}//初始化voidinit_LCD(void){write_LCD_Command(0x38);//顯示模式設(shè)置
delayms(1);write_LCD_Command(0x01);//清屏
delayms(1);write_LCD_Command(0x06);//字符進(jìn)入模式:屏幕不動(dòng),字符后移
delayms(1);write_LCD_Command(0x0c);//顯示開,關(guān)光標(biāo)
delayms(1);}//顯示字符串voidShowString(unsignedcharx,unsignedchary,unsignedchar*str){unsignedchari=0;//設(shè)置起始位置if(y==0){write_LCD_Command(0x80|x);}if(y==1){write_LCD_Command(0xc0|x);}//輸出字符串for(i=0;i<16;i++){write_LCD_data(str[i]);}}//主函數(shù)voidmain(void){init_LCD();ShowString(0,0,"224166320@qq");ShowString(0,1,"Tel:1308645xxxx");while(1);}根本思路:將一個(gè)文件的程序按照其模塊功能劃分為兩個(gè)或兩個(gè)以上的文件,每個(gè)文件表示系統(tǒng)實(shí)現(xiàn)特定的功能。如本程序可分為主函數(shù)C文件、液晶顯示C文件、液晶顯示頭文件、includes頭文件。//main.c:#include"includes.h"voidmain(void){init_LCD();ShowString(0,0,"224166320@qq");ShowString(0,1,"Tel:1308645xxxx");while(1);}大型模塊化程序的肇始〔LCD16023.0版〕//lcd1602test.c:#include<reg51.h>#include<LCD1602.h>voidShowString(unsignedcharx,unsignedchary,unsignedchar*str){unsignedchari=0;if(y==0){write_LCD_Command(0x80|x);}if(y==1){write_LCD_Command(0xc0|x);}
for(i=0;i<16;i++){write_LCD_data(str[i]);}}大型模塊化程序的肇始〔LCD16023.0版〕//includes.h:#ifndef__INCLUDES_H__#define__INCLUDES_H__#include<reg51.h>#include<intrins.h>voidShowString(unsignedcharx,unsignedchary,unsignedchar*str);init_LCD();#endif大型模塊化程序的肇始〔LCD16023.0版〕//lcd1602.h:#ifndefLCD_CHAR_1602_2010_11_8#defineLCD_CHAR_1602_2010_11_8sbitRS=P2^0;//存放器選擇位,將RS位定義為P2.0引腳sbitRW=P2^1;//讀寫選擇位,將RW位定義為P2.1引腳sbitEN=P2^2;//使能信號位,將E位定義為P2.2引腳voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}大型模塊化程序的肇始〔LCD16023.0版〕接上頁://忙檢測函數(shù)unsignedcharbusy_check(void){unsignedcharLCD_Status;//定義忙狀態(tài)變量
RS=0;RW=1;EN=1;delayms(1);LCD_Status=P0;//讀取忙狀態(tài)
EN=0;returnLCD_Status;//返回忙狀態(tài)}//寫命令voidwrite_LCD_Command(unsignedcharcmd){while((busy_check()&0x80)==0x80);//等待忙狀態(tài)結(jié)束
RS=0;RW=0;EN=0;P0=cmd;EN=1;delayms(1);EN=0;}接上頁://寫數(shù)據(jù)voidwrite_LCD_data(unsignedchardat){while((busy_check()&0x80)==0x80);RS=1;RW=0;EN=0;P0=dat;EN=1;delayms(1);EN=0;}//初始化voidinit_LCD(void){write_LCD_Command(0x38);//顯示模式設(shè)置
delayms(1);write_LCD_Command(0x01);//清屏
delayms(1);write_LCD_Command(0x06);//字符進(jìn)入模式:屏幕不動(dòng),字符后移
delayms(1);write_LCD_Command(0x0c);//顯示開,關(guān)光標(biāo)
delayms(1);}#endif上面這個(gè)模塊化程序的缺陷:1、將大量實(shí)質(zhì)性函數(shù)代碼寫入到lcd1602.h這個(gè)頭文件里面,混淆了頭文件區(qū)別于C語言源文件的功能——頭文件應(yīng)為一份接口描述文件,其文件內(nèi)部不應(yīng)包含實(shí)質(zhì)性函數(shù)代碼,它就是一份說明書,說明的內(nèi)容就是模塊對外的接口函數(shù)或接口變量,同時(shí)包含很重要的宏定義及一些結(jié)構(gòu)體的信息,離開這些信息就無法正常使用接口接口變量。2、includes.h這個(gè)頭文件將程序用到的所有頭文件都包含進(jìn)去,不要在這個(gè)文件中再寫入象函數(shù)聲明這樣的語句;而要在這個(gè)頭文件中再聲明函數(shù),本身說明模塊化程序的不標(biāo)準(zhǔn)。思路:將此程序按照其模塊功能劃分為主函數(shù)C文件、初始化函數(shù)C文件、液晶顯示C文件、includes頭文件、液晶顯示C文件的頭文件、初始化函數(shù)C文件的頭文件,共6個(gè)文件,其中l(wèi)cd1602.h和init.h實(shí)現(xiàn)lcd1602test.c和init.c兩個(gè)文件和其他文件的連接。//main.c:#include"includes.h"voidmain(void){init_LCD();ShowString(0,0,"224166320@qq");ShowString(0,1,"Tel:1308645xxxx");while(1);}程序修改如下:對3.0版本程序的修正#include<includes.h>//初始化voidinit_LCD(void){write_LCD_Command(0x38);//顯示模式設(shè)置
delayms(1);write_LCD_Command(0x01);//清屏
delayms(1);write_LCD_Command(0x06);//字符進(jìn)入模式:屏幕不動(dòng),字符后移
delayms(1);write_LCD_Command(0x0c);//顯示開,關(guān)光標(biāo)
delayms(1);}//init.c:#include<includes.h>//延時(shí)函數(shù)voiddelayms(unsignedintms){unsignedchari;while(ms--){for(i=0;i<120;i++);}}//lcd1602test.c:接上頁://忙檢測函數(shù)unsignedcharbusy_check(void){unsignedcharLCD_Status;//定義忙狀態(tài)變量
RS=0;RW=1;EN=1;delayms(1);LCD_Status=P0;//讀取忙狀態(tài)
EN=0;returnLCD_Status;//返回忙狀態(tài)}//寫命令voidwrite_LCD_Command(unsignedcharcmd){while((busy_check()&0x80)==0x80);//等待忙狀態(tài)結(jié)束
RS=0;RW=0;EN=0;P0=cmd;EN=1;delayms(1);EN=0;}接上頁://寫數(shù)據(jù)voidwrite_LCD_data(unsignedchardat){while((busy_check()&0x80)==0x80);RS=1;RW=0;EN=0;P0=dat;EN=1;delayms(1);EN=0;}//顯示字符串voidShowString(unsignedcharx,unsignedchary,unsignedchar*str){unsignedchari=0;//設(shè)置起始位置if(y==0){write_L
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 個(gè)人房屋租賃合同質(zhì)押示范文本
- 中外合拍電影合同范本:專用
- 二手房交易合同權(quán)利轉(zhuǎn)讓協(xié)議
- 中外合資環(huán)保塑料制品銷售合同
- 上海市新勞務(wù)合同范本
- 個(gè)人股權(quán)質(zhì)押貸款合同
- 2025年兒童游樂場建設(shè)合作協(xié)議范本
- 2025年電子零售房產(chǎn)租賃協(xié)議
- 2025年廚房集成吊頂安裝協(xié)議
- 二手家具購銷合同細(xì)則
- “5E”教學(xué)模式下高中數(shù)學(xué)教學(xué)實(shí)踐研究
- 急救藥品知識培訓(xùn)內(nèi)容
- 人教版初中英語單詞大全七八九年級(帶音標(biāo)) mp3聽力音頻下載
- 浙江省杭州市2024-2025學(xué)年高三上學(xué)期一模英語試題(含解析無聽力原文及音頻)
- 2024年湖南高速鐵路職業(yè)技術(shù)學(xué)院高職單招(英語/數(shù)學(xué)/語文)筆試歷年參考題庫含答案解析
- 部編版六年級下冊語文第3單元習(xí)作例文+習(xí)作PPT
- 四年級上冊英語試題-Module 9 Unit 1 What happened to your head--外研社(一起)(含答案)
- 子宮內(nèi)膜異位癥診療指南
- 《高級計(jì)量經(jīng)濟(jì)學(xué)》-上課講義課件
- 玩轉(zhuǎn)數(shù)和形課件
- 護(hù)理診斷及護(hù)理措施128條護(hù)理診斷護(hù)理措施
評論
0/150
提交評論