行的按鍵a端都依次接在低四位,四列按鍵的b端依次接在高四位。
我們把鍵值編為 1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
對此,我引入了一位高人編寫的鍵值判斷程式:
uchar keyscan(void)
; for(j=0; j<4; j++)
}它的方式比較容易理解,其實就是按照行列查詢法。每次先讓一行為低電平,依次判斷該行的四個鍵子,哪個是低電平。雖然沒有按鍵消除抖動,但是效果依然十分給力。
有興趣的讀者可以自行慢慢分析。除此之外還有很多方法,但是**普遍比較冗長。有興趣大家可以學習一下其他方法。
接下來說說直流電機的變速驅動,就是pwm,就是脈寬調變。根據高電平存在的時間和低電平的時間比例,改變速度,也可以理解成根據數碼訊號的占空比來控制電動機的轉速。
pwm在微控制器應用中屬於常用範圍,在arm微控制器中都整合了pwm模組。那麼如何實現pwm呢,pwm是週期控制的一種,所以涉及到週期訊號,一定要利用微控制器中的定時器。
複習一下定時器,定時器涉及四個暫存器,tmod,th0/1,tl0/1,tcon(主要是tr0/1這一位,控制定時器的啟動)
我們借助彙編,可以利用中斷,也可以不借助中斷。利用c語言,就一定要利用中斷,中斷還要涉及ea位,et0/1位,以及中斷編號和中斷向量。
51組合語言編寫的範例如下:
不利用中斷的版本,p1.0管腳接在直流電機+端,電機—端接在gnd.
**如下:
*** 0000h
ajmp main
*** 0080h
main:mov tmod , #10h t1是方式1,定時器。
loop2:clr p1.0
mov th1, #08h
mov tl1, #0abh
setb tr1
loop:jnb tf1 ,loop
setb p1.0
clr tr1
mov th1,#0aah
mov tl1 , #0aah
setb tr1
loop1:jnb tf1 , loop1
clr tr1
ajmp loop2
不利用中斷方式的匯程式設計序,不需要中斷入口,只需要判斷tf1/0,是否為零。而利用中斷方式,就需要中斷處理程式。例如: p1.0管腳接在直流電機+端,電機—端接在gnd.
*** 0000h
ajmp main
*** 000bh -----定時器0中斷程式入口
ajmp proc -------定時器中斷處理程式的名字
*** 0080h
main : clr p1.0
clr c
mov tmod , #01h
mov th0 , #04h
mov tl0, #44h
setb ea
setb et0
setb tr0
loop0: ajmp loop0等待中斷
proc : cpl c
jnb c , loop1
clr tr0
setb p1.0
mov th0,#06h
mov tl0,#66h
setb tr0
ajmp endi
loop1:clr tr0
clr p1.0
mov th0 ,#04h
mov tl0,#44h
setb tr0
endi :reti
由此可見,利用中斷設計匯程式設計序,重點在於中斷處理程式。編寫思想在於實時性,在於每時每刻究竟要做什麼。注重過程控制,並且同時注重每一刻的處理。
利用c語言編寫主要要基於中斷處理。通過函式void time0_int() interrupt 1來處理中斷。
同樣,直流電機+端接p1.0,負端接gnd
程式如下:
#include
sbit drv = p1^0;
void time0_init()
void time0_int() interrupt 1
void main()
while(1);的作用和loop : ajmp loop作用一樣,就是乙個死迴圈,表示一直等待。
本篇先告一段落,下一篇講講lcd1602,以及ds18b20的驅動方式和驅動原理。之後再談談iic匯流排的呼叫方式。謝謝!
微控制器學習心得
以上三步學會,就相當於降龍十八掌武功,會了三掌了,可以勉強護身。第四步 與pc機進行rs232通訊 微控制器都有usart介面,特別是msp430系列中很多態號,都具有兩個usart介面。usart介面不能直接與pc機的rs232介面連線,它們之間的邏輯電平不同,需要使用乙個max3232晶元進行電...
微控制器學習心得三
51微控制器的那些事兒 三 接下來我們分享一下定時 計數器的應用。其實微控制器中,定時 計數器是個很常用而且很方便的時間方面的工具。學好定時器是很重要的。很多例項,諸如萬年曆,測速儀器,波特率發生器,方波發生器,脈衝發生器,pwm脈寬調變都要基於微控制器的定時 計數器來應用。總結起來,微控制器的定時...
微控制器C語言學習心得
今天寫這一篇文章並不是因為已經想好了一篇文章才寫下來,而是我要將這一篇文章作為乙個長期的筆記來寫,我會一直更新。在進行微控制器開發時,經常都會出現一些很不起眼的問題,這些問題其實都是很基礎的c語言知識點,是一些小細節。但是正是因為很基礎,又都是小細節,所以我們往往容易忽視它們。結果有時候我們會花很長...