[導(dǎo)讀]
本儀器的程序主要由鍵盤(pán)、顯示程序、AT24C01A讀寫(xiě)程序、信號(hào)產(chǎn)生程序等部分組成。以下對(duì)部分功能作一些分析。一、鍵盤(pán)程序 本儀器需要調(diào)整的數(shù)值范圍較大,因此,“增加”和“減少”鍵必須具有快速連
本儀器的程序主要由鍵盤(pán)、顯示程序、AT24C01A讀寫(xiě)程序、信號(hào)產(chǎn)生程序等部分組成。以下對(duì)部分功能作一些分析。一、鍵盤(pán)程序 本儀器需要調(diào)整的數(shù)值范圍較大,因此,“增加”和“減少”鍵必須具有快速連加和快速連減的功能,否則調(diào)整速度太慢。這種鍵盤(pán)可以用多種方法來(lái)實(shí)現(xiàn),關(guān)鍵在于設(shè)計(jì)一個(gè)正確的程序結(jié)構(gòu),圖1是一種實(shí)現(xiàn)方法的流程圖。圖1 流程圖 程序工作時(shí),不斷地掃描鍵盤(pán),第一次掃描到有鍵按下后如常規(guī)鍵盤(pán)一樣,進(jìn)行鍵值處理,處理完畢,不等待鍵盤(pán)釋放,直接退出鍵盤(pán)程序。當(dāng)又一次執(zhí)行到鍵盤(pán)程序,如果檢測(cè)到鍵還被按著,就不再直接去鍵值處理程序,而是將一個(gè)計(jì)數(shù)器加1,直接返回主程序,如此循環(huán),直到計(jì)數(shù)到一個(gè)定值(如500,表示鍵盤(pán)程序已被執(zhí)行了500次),如果鍵還被按著,說(shuō)明用戶(hù)有連加(或連減)要求,程序即將計(jì)數(shù)器減去一個(gè)數(shù)值(如30),然后進(jìn)行鍵值處理。這樣,以后鍵盤(pán)程序每執(zhí)行30次,就執(zhí)行一次鍵值處進(jìn)程序,實(shí)現(xiàn)了第一次啟動(dòng)時(shí)間較長(zhǎng),以后快速連續(xù)動(dòng)作的要求。如果檢測(cè)到鍵已被釋放,則清除所有標(biāo)志,將計(jì)數(shù)器清零,準(zhǔn)備下一次按鍵處理?! 〕绦蜷_(kāi)始時(shí)定義了兩個(gè)常量:Qdsj和Ljsj,如下所示const uintQdsj=500;/*與首次啟動(dòng)連加(減)功能的時(shí)間有關(guān)*/const uintLjsj=30;/*與連加(減)的速度有關(guān)*/ 這兩個(gè)常量與第一次啟動(dòng)及連加、減的速度有關(guān),具體數(shù)值應(yīng)根據(jù)實(shí)際情況試驗(yàn)后確定。下面是部分鍵處理程序,注意其中這兩個(gè)變量的使用。voidKey()/*鍵處理*/{……if(!KeyValue){…無(wú)鍵按下,清除一切標(biāo)志退出}if(KeyMark)/*第一次檢測(cè)到按鍵嗎?*/{KeyCounter++;/*不是第一次(KeyMark已是1了)*/if(Qdsj==KeyCounter) /*連續(xù)按著已有Qdsj次了*/{KeyCounter-=Ljsj; /*減去Ljsj次*/ KeyProcess(KeyValue,1);/*鍵值處理*/}else{return;}/*如果按著還沒(méi)有到Qdsj*/}else /*第一次檢測(cè)到有鍵按下*/{ mDelay(10);/*延時(shí)10毫秒*/…再次檢測(cè)if(!KeyValue){…清除一切標(biāo)志并返回}}二、小數(shù)點(diǎn)的處理 要在LED數(shù)碼管上顯示小數(shù)點(diǎn),可以有兩種選擇,一種方式是在顯示0.1~0.9時(shí)用小數(shù)顯示,而在顯示1~500時(shí)不顯示小數(shù)點(diǎn),這種方式編程略麻煩一些;另一種是使用定點(diǎn)的方式顯示小數(shù)點(diǎn),即不論是在0.1~0.9Hz段,還是1~500Hz段,均在倒數(shù)第二位點(diǎn)亮小數(shù)點(diǎn),這種顯示方式比較簡(jiǎn)單,本機(jī)采用了第二種方式。 通常,用高級(jí)語(yǔ)言編程時(shí),可以用浮點(diǎn)型數(shù)據(jù)來(lái)表示小數(shù),但本程序并沒(méi)有這樣來(lái)處理。因?yàn)閱纹瑱C(jī)的資源有限,而浮點(diǎn)型數(shù)據(jù)的表達(dá)方式與其他數(shù)據(jù)的表達(dá)方式很不相同,無(wú)論是存儲(chǔ)還是運(yùn)算,都相當(dāng)占用資源,因而在單片機(jī)中能不用浮點(diǎn)型數(shù)據(jù)就盡量不要使用。這里我們將所有的頻率設(shè)定值擴(kuò)大10倍,即所要求的頻率值是0.1~500Hz,但在單片機(jī)內(nèi)部用1~5000來(lái)表示。如果頻率設(shè)定值小于10,每按一次鍵,頻率設(shè)定值就加或減1,如果頻率設(shè)定值大于等于10,每按一次按鍵就加或減10。例如,當(dāng)前頻率設(shè)定值為100,按一下“增加”鍵,該值就會(huì)變?yōu)?10,相當(dāng)于頻率設(shè)定值由10變?yōu)?1;如果當(dāng)前設(shè)定值為9,按一下“減少”鍵,該值變?yōu)?,相當(dāng)于頻率值由0.9變到了0.8。在根據(jù)頻率設(shè)定值計(jì)算定時(shí)常數(shù)時(shí),只要將被除數(shù)擴(kuò)大10倍即可,程序中是這樣表示的:LTEmp=1000000; ltemp*=10; //由于plsd被放大了10倍,故被除數(shù)也放大10倍…… 在顯示頻率設(shè)定值時(shí),點(diǎn)亮倒數(shù)第二位的數(shù)碼管上的小數(shù)點(diǎn),顯示程序中有這樣的程序行:if(Counter1==1) //如果當(dāng)前正在顯示倒數(shù)第二位時(shí){ if(!PlSl) //如果是要求顯示頻率DispCode=DispCode&0xbf;/*點(diǎn)亮小數(shù)點(diǎn)*/} 由于P0.6與小數(shù)點(diǎn)位相連,所以不論待顯示的數(shù)是多少,該位被清零后,小數(shù)點(diǎn)就能被點(diǎn)亮。要將該位清零,只要將字形碼與0xbf(10111111)相與即可。三、AT24C01A的讀寫(xiě) AT24C01A芯片是具有I2C接口的EEPROM,由于89C51 單片機(jī) 沒(méi)有I2C接口,因此,必須用I/O口模擬I2C時(shí)序。這里僅提供作者用C語(yǔ)言編寫(xiě)的接口程序,不對(duì)此作更多的介紹?! ∈褂眠@一接口程序,只要定義好寫(xiě)常數(shù)、讀常數(shù)及根據(jù)硬件連線(xiàn)定義好三個(gè)引腳SDA、SCL和WP,然后直接調(diào)用讀、寫(xiě)函數(shù)即可。#defineAddWr0xa0/*器件地址選擇及寫(xiě)標(biāo)志*/#defineAddRd0xa1/*器件地址選擇及讀標(biāo)志*/sbitSda=P3^7;/*串行數(shù)據(jù)*/sbitScl=P3^6;/*串行時(shí)鐘*/sbitWP=P3^5; 接口程序提供了多字節(jié)的讀、寫(xiě)函數(shù),其中讀函數(shù)需要用到三個(gè)參數(shù):用于存放讀出數(shù)據(jù)的數(shù)組,待讀EEPROM的起始地址,字節(jié)數(shù);寫(xiě)函數(shù)也要用到三個(gè)參數(shù):用于存放待寫(xiě)入數(shù)據(jù)的數(shù)組,待寫(xiě)入EEPROM的起始地址,字節(jié)數(shù)。下面是這兩個(gè)函數(shù)的用法參考: RdFromROM(Number,10,2); //從地址10H開(kāi)始處讀出2個(gè)字節(jié),存入Numbre數(shù)組中。 WrToROM(Number,10,2); //將Number數(shù)組中的2個(gè)字節(jié)寫(xiě)入EEPROM,地址從10H開(kāi)始四、信號(hào)產(chǎn)生 信號(hào)發(fā)生由定時(shí)中斷0完成,在定時(shí)時(shí)間到之后,重置定時(shí)常數(shù),接著判斷究竟是較高頻率還是較低頻率,分別予以處理,如果是較高頻率,直接取反輸出端口即可返回,如果是較低頻率,則要進(jìn)行計(jì)數(shù),并判斷計(jì)數(shù)值是否到設(shè)定值,如果到了,則取反輸出端口,并清零計(jì)數(shù)器,然后再返回,這部分程序如下 :voidOutWave()interrupt1 //定時(shí)0中斷用于波形輸出{ statICuint Count; //較低頻率時(shí)計(jì)數(shù)用TH0=CTH0; //重裝時(shí)間常數(shù)TL0=CTL0;if(HighLow) //如果是較高頻率{ WaveOut=!WaveOut;Mczsl++; }else{ Count++;if(Count>=Plcs){ WaveOut=!WaveOut;Count=0;Mczsl++;} } } 其中Mczsl是脈沖輸出個(gè)數(shù)的計(jì)數(shù)值。從程序中還可以看出,每次輸出只能得到波形的一半,要么高電平,要么低電平,一個(gè)完整的波形需要兩次輸出才能完成?! 《〞r(shí)中斷中所設(shè)定的定時(shí)常數(shù),預(yù)設(shè)定計(jì)數(shù)值(Plcs)都由主程序根據(jù)頻率設(shè)定值計(jì)算得到,根據(jù)前述原理,對(duì)于較低頻率的信號(hào)和較高頻率的信號(hào)采用兩種不同的方法產(chǎn)生,對(duì)于較低頻率的信號(hào),定時(shí)常數(shù)是一個(gè)定值,通過(guò)改變預(yù)設(shè)定計(jì)數(shù)值來(lái)達(dá)到定時(shí)時(shí)間,而對(duì)于較高頻率的信號(hào),直接改變定時(shí)常數(shù)來(lái)改變定時(shí)時(shí)間。為此,在主程序中根據(jù)設(shè)定值的大小分別處理,如果設(shè)定值大于10Hz,那么是較高頻率的算法,只要計(jì)算出設(shè)定頻率值對(duì)應(yīng)的時(shí)間,不難得到待設(shè)定值,程序中的處理方法是:ltemp=1000000;ltemp*=10; //由于plsd被放大了10倍,故被除數(shù)也放大10倍ltemp/=Plsd; //獲得周期(單位微秒)ltemp/=2; //獲得定時(shí)常數(shù) 根據(jù)t=1/f,計(jì)算定時(shí)時(shí)間,單位是s,而我們所要求的定時(shí)時(shí)間單位是μs,因此,首先讓ltemp等于1000000,又由于Plsd變量在 單片機(jī) 內(nèi)部被放大10倍,故再將該值擴(kuò)大10倍,然后用ltemp為被除數(shù),去除以Plsd,得到周期數(shù)。由于每次定時(shí)中斷只能得到一半波形,因此定時(shí)數(shù)應(yīng)該是周期數(shù)的一半,將周期數(shù)除以2,即得到了定時(shí)常數(shù)。顯然,這里沒(méi)有先計(jì)算時(shí)間到s,然后再換算為μs,其目的也是為了避免小數(shù)運(yùn)算。當(dāng)所設(shè)定的頻率值小于10Hz時(shí),程序是這樣處理的:CTH0=(65536-1000)/256;CTL0=(65536-1000)%256; //否則是在10HZ以下,定時(shí)器的定時(shí)常數(shù)是1msHighLow=0;Plcs=5000/Plsd; 首先將定時(shí)常數(shù)確定為1000μs,然后將標(biāo)志位HighLow置0,表示要進(jìn)行較低頻率的處理,最后計(jì)算出中斷次數(shù)。中斷次數(shù)這樣來(lái)確定:用10000000/Plsd得到周期數(shù),然后用這個(gè)值除以2000即得可,這時(shí)除以2000的原因同上述分析,即定時(shí)時(shí)間為1000μs,最終得到的的周期是2000μs。限于篇幅,完整的源程序在本期光盤(pán)中提供?! ∪绻x者在設(shè)計(jì)、制作等方面有收獲,歡迎到http://www.mcustudio.com(平凡 單片機(jī) 工作室)交流,如果在制作、調(diào)試或有什么困難,也可以到這里尋求幫助。作者制作的成品如圖2所示。|
欲知詳情,請(qǐng)下載word文檔
下載文檔
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。
關(guān)鍵字:
阿維塔
塞力斯
華為
加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...
關(guān)鍵字:
AWS
AN
BSP
數(shù)字化
倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...
關(guān)鍵字:
汽車(chē)
人工智能
智能驅(qū)動(dòng)
BSP
北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...
關(guān)鍵字:
亞馬遜
解密
控制平面
BSP
8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。
關(guān)鍵字:
騰訊
編碼器
CPU
8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。
關(guān)鍵字:
華為
12nm
EDA
半導(dǎo)體
8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。
關(guān)鍵字:
華為
12nm
手機(jī)
衛(wèi)星通信
要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...
關(guān)鍵字:
通信
BSP
電信運(yùn)營(yíng)商
數(shù)字經(jīng)濟(jì)
北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...
關(guān)鍵字:
VI
傳輸協(xié)議
音頻
BSP
北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...
關(guān)鍵字:
BSP
信息技術(shù)
山海路引?嵐悅新程 三亞2024年8月27日 /美通社/ --?近日,海南地區(qū)六家凱悅系酒店與中國(guó)高端新能源車(chē)企嵐圖汽車(chē)(VOYAH)正式達(dá)成戰(zhàn)略合作協(xié)議。這一合作標(biāo)志著兩大品牌在高端出行體驗(yàn)和環(huán)保理念上的深度融合,將...
關(guān)鍵字:
新能源
BSP
PLAYER
ASIA
上海2024年8月28日 /美通社/ -- 8月26日至8月28日,AHN LAN安嵐與股神巴菲特的孫女妮可?巴菲特共同開(kāi)啟了一場(chǎng)自然和藝術(shù)的療愈之旅。 妮可·巴菲特在療愈之旅活動(dòng)現(xiàn)場(chǎng)合影 ...
關(guān)鍵字:
MIDDOT
BSP
LAN
SPI
8月29日消息,近日,華為董事、質(zhì)量流程IT總裁陶景文在中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式上表示,中國(guó)科技企業(yè)不應(yīng)怕美國(guó)對(duì)其封鎖。
關(guān)鍵字:
華為
12nm
EDA
半導(dǎo)體
上海2024年8月26日 /美通社/ -- 近日,全球領(lǐng)先的消費(fèi)者研究與零售監(jiān)測(cè)公司尼爾森IQ(NielsenIQ)迎來(lái)進(jìn)入中國(guó)市場(chǎng)四十周年的重要里程碑,正式翻開(kāi)在華發(fā)展新篇章。自改革開(kāi)放以來(lái),中國(guó)市場(chǎng)不斷展現(xiàn)出前所未有...
關(guān)鍵字:
BSP
NI
SE
TRACE
上海2024年8月26日 /美通社/ -- 第二十二屆跨盈年度B2B營(yíng)銷(xiāo)高管峰會(huì)(CC2025)將于2025年1月15-17日在上海舉辦,本次峰會(huì)早鳥(niǎo)票注冊(cè)通道開(kāi)啟,截止時(shí)間10月11日。 了解更多會(huì)議信息:cc.co...
關(guān)鍵字:
BSP
COM
AI
INDEX
上海2024年8月26日 /美通社/ -- 今日,高端全合成潤(rùn)滑油品牌美孚1號(hào)攜手品牌體驗(yàn)官周冠宇,開(kāi)啟全新旅程,助力廣大車(chē)主通過(guò)駕駛?cè)ヌ剿鞲鼜V闊的世界。在全新發(fā)布的品牌視頻中,周冠宇及不同背景的消費(fèi)者表達(dá)了對(duì)駕駛的熱愛(ài)...
關(guān)鍵字:
BSP
汽車(chē)制造
此次發(fā)布標(biāo)志著Cision首次為亞太市場(chǎng)量身定制全方位的媒體監(jiān)測(cè)服務(wù)。 芝加哥2024年8月27日 /美通社/ -- 消費(fèi)者和媒體情報(bào)、互動(dòng)及傳播解決方案的全球領(lǐng)導(dǎo)者Cis...
關(guān)鍵字:
CIS
IO
SI
BSP
上海2024年8月27日 /美通社/ -- 近來(lái),具有強(qiáng)大學(xué)習(xí)、理解和多模態(tài)處理能力的大模型迅猛發(fā)展,正在給人類(lèi)的生產(chǎn)、生活帶來(lái)革命性的變化。在這一變革浪潮中,物聯(lián)網(wǎng)成為了大模型技術(shù)發(fā)揮作用的重要陣地。 作為全球領(lǐng)先的...
關(guān)鍵字:
模型
移遠(yuǎn)通信
BSP
高通
北京2024年8月27日 /美通社/ -- 高途教育科技公司(紐約證券交易所股票代碼:GOTU)("高途"或"公司"),一家技術(shù)驅(qū)動(dòng)的在線(xiàn)直播大班培訓(xùn)機(jī)構(gòu),今日發(fā)布截至2024年6月30日第二季度未經(jīng)審計(jì)財(cái)務(wù)報(bào)告。 2...
關(guān)鍵字:
BSP
電話(huà)會(huì)議
COM
TE
8月26日消息,華為公司最近正式啟動(dòng)了“華為AI百校計(jì)劃”,向國(guó)內(nèi)高校提供基于昇騰云服務(wù)的AI計(jì)算資源。
關(guān)鍵字:
華為
12nm
EDA
半導(dǎo)體