[導(dǎo)讀]
本儀器的程序主要由鍵盤、顯示程序、AT24C01A讀寫程序、信號產(chǎn)生程序等部分組成。以下對部分功能作一些分析。一、鍵盤程序 本儀器需要調(diào)整的數(shù)值范圍較大,因此,“增加”和“減少”鍵必須具有快速連
本儀器的程序主要由鍵盤、顯示程序、AT24C01A讀寫程序、信號產(chǎn)生程序等部分組成。以下對部分功能作一些分析。一、鍵盤程序 本儀器需要調(diào)整的數(shù)值范圍較大,因此,“增加”和“減少”鍵必須具有快速連加和快速連減的功能,否則調(diào)整速度太慢。這種鍵盤可以用多種方法來實現(xiàn),關(guān)鍵在于設(shè)計一個正確的程序結(jié)構(gòu),圖1是一種實現(xiàn)方法的流程圖。圖1 流程圖 程序工作時,不斷地掃描鍵盤,第一次掃描到有鍵按下后如常規(guī)鍵盤一樣,進(jìn)行鍵值處理,處理完畢,不等待鍵盤釋放,直接退出鍵盤程序。當(dāng)又一次執(zhí)行到鍵盤程序,如果檢測到鍵還被按著,就不再直接去鍵值處理程序,而是將一個計數(shù)器加1,直接返回主程序,如此循環(huán),直到計數(shù)到一個定值(如500,表示鍵盤程序已被執(zhí)行了500次),如果鍵還被按著,說明用戶有連加(或連減)要求,程序即將計數(shù)器減去一個數(shù)值(如30),然后進(jìn)行鍵值處理。這樣,以后鍵盤程序每執(zhí)行30次,就執(zhí)行一次鍵值處進(jìn)程序,實現(xiàn)了第一次啟動時間較長,以后快速連續(xù)動作的要求。如果檢測到鍵已被釋放,則清除所有標(biāo)志,將計數(shù)器清零,準(zhǔn)備下一次按鍵處理?! 〕绦蜷_始時定義了兩個常量:Qdsj和Ljsj,如下所示const uintQdsj=500;/*與首次啟動連加(減)功能的時間有關(guān)*/const uintLjsj=30;/*與連加(減)的速度有關(guān)*/ 這兩個常量與第一次啟動及連加、減的速度有關(guān),具體數(shù)值應(yīng)根據(jù)實際情況試驗后確定。下面是部分鍵處理程序,注意其中這兩個變量的使用。voidKey()/*鍵處理*/{……if(!KeyValue){…無鍵按下,清除一切標(biāo)志退出}if(KeyMark)/*第一次檢測到按鍵嗎?*/{KeyCounter++;/*不是第一次(KeyMark已是1了)*/if(Qdsj==KeyCounter) /*連續(xù)按著已有Qdsj次了*/{KeyCounter-=Ljsj; /*減去Ljsj次*/ KeyProcess(KeyValue,1);/*鍵值處理*/}else{return;}/*如果按著還沒有到Qdsj*/}else /*第一次檢測到有鍵按下*/{ mDelay(10);/*延時10毫秒*/…再次檢測if(!KeyValue){…清除一切標(biāo)志并返回}}二、小數(shù)點的處理 要在LED數(shù)碼管上顯示小數(shù)點,可以有兩種選擇,一種方式是在顯示0.1~0.9時用小數(shù)顯示,而在顯示1~500時不顯示小數(shù)點,這種方式編程略麻煩一些;另一種是使用定點的方式顯示小數(shù)點,即不論是在0.1~0.9Hz段,還是1~500Hz段,均在倒數(shù)第二位點亮小數(shù)點,這種顯示方式比較簡單,本機采用了第二種方式?! ⊥ǔ?,用高級語言編程時,可以用浮點型數(shù)據(jù)來表示小數(shù),但本程序并沒有這樣來處理。因為單片機的資源有限,而浮點型數(shù)據(jù)的表達(dá)方式與其他數(shù)據(jù)的表達(dá)方式很不相同,無論是存儲還是運算,都相當(dāng)占用資源,因而在單片機中能不用浮點型數(shù)據(jù)就盡量不要使用。這里我們將所有的頻率設(shè)定值擴大10倍,即所要求的頻率值是0.1~500Hz,但在單片機內(nèi)部用1~5000來表示。如果頻率設(shè)定值小于10,每按一次鍵,頻率設(shè)定值就加或減1,如果頻率設(shè)定值大于等于10,每按一次按鍵就加或減10。例如,當(dāng)前頻率設(shè)定值為100,按一下“增加”鍵,該值就會變?yōu)?10,相當(dāng)于頻率設(shè)定值由10變?yōu)?1;如果當(dāng)前設(shè)定值為9,按一下“減少”鍵,該值變?yōu)?,相當(dāng)于頻率值由0.9變到了0.8。在根據(jù)頻率設(shè)定值計算定時常數(shù)時,只要將被除數(shù)擴大10倍即可,程序中是這樣表示的:LTEmp=1000000; ltemp*=10; //由于plsd被放大了10倍,故被除數(shù)也放大10倍…… 在顯示頻率設(shè)定值時,點亮倒數(shù)第二位的數(shù)碼管上的小數(shù)點,顯示程序中有這樣的程序行:if(Counter1==1) //如果當(dāng)前正在顯示倒數(shù)第二位時{ if(!PlSl) //如果是要求顯示頻率DispCode=DispCode&0xbf;/*點亮小數(shù)點*/} 由于P0.6與小數(shù)點位相連,所以不論待顯示的數(shù)是多少,該位被清零后,小數(shù)點就能被點亮。要將該位清零,只要將字形碼與0xbf(10111111)相與即可。三、AT24C01A的讀寫 AT24C01A芯片是具有I2C接口的EEPROM,由于89C51 單片機 沒有I2C接口,因此,必須用I/O口模擬I2C時序。這里僅提供作者用C語言編寫的接口程序,不對此作更多的介紹?! ∈褂眠@一接口程序,只要定義好寫常數(shù)、讀常數(shù)及根據(jù)硬件連線定義好三個引腳SDA、SCL和WP,然后直接調(diào)用讀、寫函數(shù)即可。#defineAddWr0xa0/*器件地址選擇及寫標(biāo)志*/#defineAddRd0xa1/*器件地址選擇及讀標(biāo)志*/sbitSda=P3^7;/*串行數(shù)據(jù)*/sbitScl=P3^6;/*串行時鐘*/sbitWP=P3^5; 接口程序提供了多字節(jié)的讀、寫函數(shù),其中讀函數(shù)需要用到三個參數(shù):用于存放讀出數(shù)據(jù)的數(shù)組,待讀EEPROM的起始地址,字節(jié)數(shù);寫函數(shù)也要用到三個參數(shù):用于存放待寫入數(shù)據(jù)的數(shù)組,待寫入EEPROM的起始地址,字節(jié)數(shù)。下面是這兩個函數(shù)的用法參考: RdFromROM(Number,10,2); //從地址10H開始處讀出2個字節(jié),存入Numbre數(shù)組中。 WrToROM(Number,10,2); //將Number數(shù)組中的2個字節(jié)寫入EEPROM,地址從10H開始四、信號產(chǎn)生 信號發(fā)生由定時中斷0完成,在定時時間到之后,重置定時常數(shù),接著判斷究竟是較高頻率還是較低頻率,分別予以處理,如果是較高頻率,直接取反輸出端口即可返回,如果是較低頻率,則要進(jìn)行計數(shù),并判斷計數(shù)值是否到設(shè)定值,如果到了,則取反輸出端口,并清零計數(shù)器,然后再返回,這部分程序如下?。簐oidOutWave()interrupt1 //定時0中斷用于波形輸出{ statICuint Count; //較低頻率時計數(shù)用TH0=CTH0; //重裝時間常數(shù)TL0=CTL0;if(HighLow) //如果是較高頻率{ WaveOut=!WaveOut;Mczsl++; }else{ Count++;if(Count>=Plcs){ WaveOut=!WaveOut;Count=0;Mczsl++;} } } 其中Mczsl是脈沖輸出個數(shù)的計數(shù)值。從程序中還可以看出,每次輸出只能得到波形的一半,要么高電平,要么低電平,一個完整的波形需要兩次輸出才能完成?! 《〞r中斷中所設(shè)定的定時常數(shù),預(yù)設(shè)定計數(shù)值(Plcs)都由主程序根據(jù)頻率設(shè)定值計算得到,根據(jù)前述原理,對于較低頻率的信號和較高頻率的信號采用兩種不同的方法產(chǎn)生,對于較低頻率的信號,定時常數(shù)是一個定值,通過改變預(yù)設(shè)定計數(shù)值來達(dá)到定時時間,而對于較高頻率的信號,直接改變定時常數(shù)來改變定時時間。為此,在主程序中根據(jù)設(shè)定值的大小分別處理,如果設(shè)定值大于10Hz,那么是較高頻率的算法,只要計算出設(shè)定頻率值對應(yīng)的時間,不難得到待設(shè)定值,程序中的處理方法是:ltemp=1000000;ltemp*=10; //由于plsd被放大了10倍,故被除數(shù)也放大10倍ltemp/=Plsd; //獲得周期(單位微秒)ltemp/=2; //獲得定時常數(shù) 根據(jù)t=1/f,計算定時時間,單位是s,而我們所要求的定時時間單位是μs,因此,首先讓ltemp等于1000000,又由于Plsd變量在 單片機 內(nèi)部被放大10倍,故再將該值擴大10倍,然后用ltemp為被除數(shù),去除以Plsd,得到周期數(shù)。由于每次定時中斷只能得到一半波形,因此定時數(shù)應(yīng)該是周期數(shù)的一半,將周期數(shù)除以2,即得到了定時常數(shù)。顯然,這里沒有先計算時間到s,然后再換算為μs,其目的也是為了避免小數(shù)運算。當(dāng)所設(shè)定的頻率值小于10Hz時,程序是這樣處理的:CTH0=(65536-1000)/256;CTL0=(65536-1000)%256; //否則是在10HZ以下,定時器的定時常數(shù)是1msHighLow=0;Plcs=5000/Plsd; 首先將定時常數(shù)確定為1000μs,然后將標(biāo)志位HighLow置0,表示要進(jìn)行較低頻率的處理,最后計算出中斷次數(shù)。中斷次數(shù)這樣來確定:用10000000/Plsd得到周期數(shù),然后用這個值除以2000即得可,這時除以2000的原因同上述分析,即定時時間為1000μs,最終得到的的周期是2000μs。限于篇幅,完整的源程序在本期光盤中提供。 如果讀者在設(shè)計、制作等方面有收獲,歡迎到http://www.mcustudio.com(平凡 單片機 工作室)交流,如果在制作、調(diào)試或有什么困難,也可以到這里尋求幫助。作者制作的成品如圖2所示。|
本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
上海2025年8月26日 /美通社/ -- 在全球數(shù)字經(jīng)濟加速演進(jìn)的時代浪潮中,海量數(shù)據(jù)資源正成為企業(yè)發(fā)展的雙刃劍。超66%的企業(yè)面臨"數(shù)據(jù)沉睡"危機——分散于供應(yīng)鏈、財務(wù)、客戶運營等數(shù)十個系統(tǒng)的業(yè)務(wù)...
關(guān)鍵字:
AI
模型
軟件
數(shù)據(jù)分析
一直以來,單片機都是大家的關(guān)注焦點之一。因此針對大家的興趣點所在,小編將為大家?guī)韱纹瑱C的相關(guān)介紹,詳細(xì)內(nèi)容請看下文。
關(guān)鍵字:
單片機
數(shù)字信號
模擬信號
加快開發(fā)進(jìn)程;提升質(zhì)量、安全性、性能與成本效益 利用耐世特在底盤領(lǐng)域的專業(yè)知識和線控技術(shù)產(chǎn)品組合 美國密西根州奧本山2025年8月11日 /美通社/ --?耐...
關(guān)鍵字:
MOTION
軟件
運動控制
NI
從自然汲取,向未來創(chuàng)造 上海2025年8月8日 /美通社/ -- 2025 世界機器人大會將于8月8-12日在北京亦創(chuàng)國際會展中心拉開帷幕,F(xiàn)esto(A112展位)將以"從自然汲取,向未來創(chuàng)造&q...
關(guān)鍵字:
FESTO
機器人
BSP
軟件
引言:穿越變革浪潮,迎接智能金融時代 上海2025年7月28日 /美通社/ -- 在全球科技變革的浪潮中,生成式AI正加速驅(qū)動各行業(yè)變革,金融行業(yè)尤為顯著。在強監(jiān)管與用戶需求升級的雙重壓力,行業(yè)亟需重構(gòu)服務(wù)模...
關(guān)鍵字:
軟件
生成式AI
模型
數(shù)字化
寧波2025年7月28日 /美通社/ -- 日前,在第四屆寧波市專利創(chuàng)新大賽的聚光燈下,中之杰智能的創(chuàng)新技術(shù)"一種基于電子周轉(zhuǎn)箱的生產(chǎn)管理方法及系統(tǒng)"強勢斬獲專利優(yōu)秀獎。這枚沉甸甸的獎?wù)卤澈?..
關(guān)鍵字:
軟件
電子
智能工廠
BSP
杭州2025年7月28日 /美通社/ -- 近日,大華股份與北京北大軟件工程股份有限公司(以下簡稱"北大軟件")簽署戰(zhàn)略合作協(xié)議。雙方將重點圍繞長江禁漁等領(lǐng)域,發(fā)揮各自在產(chǎn)品、技術(shù)、平臺等方面的經(jīng)驗和...
關(guān)鍵字:
軟件
數(shù)字化
存儲器是一種用于存儲數(shù)據(jù)的集成電路。存儲器的架構(gòu)可以分為靜態(tài)隨機存取存儲器(SRAM)和動態(tài)隨機存取存儲器(DRAM)等類型。
關(guān)鍵字:
數(shù)字信號
成都 2025年7月16日 /美通社/ -- 由立嘉會議展覽有限公司主辦的"2025第四屆成渝地區(qū)裝備制造業(yè)博覽會"將于9月11日至13日在成都世紀(jì)城新國際會展中心盛大舉辦。本屆博覽會以&...
關(guān)鍵字:
BSP
軟件
供應(yīng)鏈
智能制造
在數(shù)字信號處理領(lǐng)域,濾波器是不可或缺的核心組件,其作用是對信號進(jìn)行篩選,保留有用成分并去除干擾。其中,F(xiàn)IR(Finite Impulse Response,有限脈沖響應(yīng))濾波器和 IIR(Infinite Impuls...
關(guān)鍵字:
數(shù)字信號
濾波器
脈沖響應(yīng)
上海 2025年7月14日 /美通社/ -- 近日,微創(chuàng)軟件與全球領(lǐng)先的工業(yè)級綠色智能系統(tǒng)解決方案提供商——上海電氣集團股份有限公司旗下直屬子公司上海電氣數(shù)字科技有限公司,以下簡稱"電氣數(shù)科"宣布深...
關(guān)鍵字:
電氣
軟件
數(shù)字化
BSP
模擬數(shù)字轉(zhuǎn)換器即A/D轉(zhuǎn)換器,或簡稱ADC,通常是指一個將模擬信號轉(zhuǎn)變?yōu)閿?shù)字信號的電子元件。
關(guān)鍵字:
數(shù)字信號
全新的集成解決方案確保企業(yè)以安全、負(fù)責(zé)任的方式應(yīng)用 AI智能體及其他生成式AI技術(shù)。 借助以上工具,企業(yè)可以對智能體執(zhí)行"紅隊測試"和審計,并檢測"影子智能體"...
關(guān)鍵字:
IBM
軟件
智能體
AI
從傳統(tǒng)機械制造邁向數(shù)字化、智能化的轉(zhuǎn)型之路,軟件定義汽車(SDV)的出現(xiàn),無疑成為這場變革的關(guān)鍵驅(qū)動力,預(yù)示著產(chǎn)業(yè)拐點即將來臨。那么,支撐軟件定義汽車發(fā)展的支柱究竟是什么呢?
關(guān)鍵字:
軟件
傳感器
智能化
上海 2025年6月16日 /美通社/ -- 在工信部《"十四五"智能制造發(fā)展規(guī)劃》推動產(chǎn)業(yè)升級的背景下,工業(yè)互聯(lián)網(wǎng)平臺加速向制造核心環(huán)節(jié)滲透。據(jù)權(quán)威機構(gòu)統(tǒng)計,我國制造業(yè)重點領(lǐng)域關(guān)鍵工序數(shù)控化率達(dá)5...
關(guān)鍵字:
數(shù)字化
軟件
智能制造
智能工廠
在科技飛速發(fā)展的當(dāng)下,汽車行業(yè)正處于一場深刻變革的浪潮之中。從傳統(tǒng)機械制造邁向數(shù)字化、智能化的轉(zhuǎn)型之路,軟件定義汽車(SDV)的出現(xiàn),無疑成為這場變革的關(guān)鍵驅(qū)動力,預(yù)示著產(chǎn)業(yè)拐點即將來臨。
關(guān)鍵字:
汽車
機械制造
軟件
上海 2025年5月29日 /美通社/ -- 2025年6月1日,Brother集團在華全資子公司——兄弟(中國)商業(yè)有限公司(下簡稱"兄弟(中國)")...
關(guān)鍵字:
打印機
可持續(xù)發(fā)展
軟件
通信
長春 2025年5月26日 /美通社/ -- 5月23日,第63屆中國高等教育博覽會(簡稱"高博會")在長春東北亞國際博覽中心開幕,浪潮軟件精彩亮相A3館,為參展嘉賓和觀眾帶來了靈犀有言教育大模型、...
關(guān)鍵字:
軟件
AI
模型
工業(yè)互聯(lián)網(wǎng)
在科技飛速發(fā)展的當(dāng)下,汽車行業(yè)正經(jīng)歷著一場深刻變革,軟件定義車輛(Software-Defined Vehicle,SDV)逐漸成為行業(yè)焦點,對汽車電子技術(shù)的未來發(fā)展產(chǎn)生著深遠(yuǎn)影響。
關(guān)鍵字:
汽車架構(gòu)
軟件
SDV
江蘇無錫 2025年5月19日 /美通社/ -- 5月16日,第九屆智能工廠高峰論壇在無錫盛大啟幕,數(shù)百位制造業(yè)管理者、技術(shù)專家與行業(yè)先鋒齊聚太湖之畔,共探智能工廠的落地路徑與未來圖景。在這場以"智造進(jìn)階&q...
關(guān)鍵字:
離散
智能工廠
軟件
中國制造