自學單片機第三十二篇:光線可調檯燈上篇

2021-01-08 小亮談電氣

有了之前的吊燈案例做打底,我們再來看一個小檯燈的案例,生活中的一個小電器,這個小檯燈價格也不貴,是一款光線可調節的,有三種亮度可以調節,只有一個按鍵,電池是可充電電池。

當這個小檯燈購買回來時,家人感覺很神奇,只需要觸摸就可以點亮,而且可以調節亮度,同時通過USB充電即可,很實用。作為我們電氣人來說,通過外觀和動作就可以大致解析出內部原理和組成,我不做這個,所以就不分析了,我們只是來看下,如果通過51單片機如何進行實現這個檯燈的功能。

每個程序都是建立在硬體的基礎上的,儘管我們不分析其結構,但是我們有必要對光線可調來進行簡單的分析,這樣有利於下一步的程序書寫。

我們可以觀察到有四種狀態,暗,一般,亮,關。

於是我們可以得出以下四種控制方式,也許有更多,我們只是以這四種為例。

1,通過調節電阻值得大小來調節亮度。

2,通過調節燈的數量來調節亮度。

3,通過調節電流的大小來調節亮度。

4,通過佔空比信號來調節亮度。

四種方法,第一和第二種最直觀,最好理解,第一是通過減小串入電路的電阻,進而減小電流的大小,然後就可以控制燈光的亮度了。第二種是通過增加燈泡的數量,也可以增加燈光的亮度。簡單,直接,好理解。

第三種其實是第一種的一種變形,此處是通過短路的方法來實現電阻的大小改變,進而同樣的改變電流的大小,也就實現了燈光亮度的調節。

第四種就是通過佔空比來調節燈泡的亮度,這種方法,我們之後在著重介紹,首先介紹下前三種。

為了便於理解,我們使用第一個電路來實現這個案例。

首先分析下輸入,只有一個可復位按鈕開關,輸出為一個總電源,三個控制線。當點擊第一下時,暗模式打開,點擊第二下時,一般模式打開,點擊第三下,亮模式打開,點擊第四下,關閉。

我們首先梳理下程序。

如果你看過了之前的那一篇關於《多彩的吊燈》的文章,你會發現,其實這裡的程序跟吊燈中的幾乎一樣,唯一不同的就是修改了switch函數中的輸出變量,因為這裡的內容對應的是開關的相應的動作。然後是把按鍵的功能由10個調整到了4個,所以對key進行了修改。之前一直沒有對程序進行講解,是因為,我們的教程也從第一期更新了50多期了,如果從第一期一直看過來的話,想必不會出現無法讀懂的情況,所以我們就只是把代碼貼出來,沒有講解,不直接複製代碼而採用圖片是因為,這樣可以讓大家有更多的機會去自己把代碼寫出來,一味地複製別人的代碼,一方面不利於理解,另一方面對自己打字的速度也沒有提升。如果有需要源碼的可以留言,我會私信提供。

這裡我就這個代碼進行簡單的說明,之後會依然是直接貼代碼,然後仿真。案例還會再說幾個,儘量把案例說的覆蓋面廣一些,之後就開始中斷和定時器了。

第五行是一個聲明,說明了我們所使用的這些簡寫,如P1,P2等等,在reg52.h中有定義,這裡使用時都可以直接調用,非常方便。

然後是輸入信號的定義,這裡使用key_Led來代替P1^0,不是說P1^0不能用,只是為了方便在程序中當我看到key_Led時,可以快速的知道這個埠指的是什麼含義,如果記憶力超群,也是可以直接使用P1^0的。

接下來是輸出埠的定義,同樣是為了方便自己識別。名稱的定義,可以自己按照自己的想法來,也可以多看看別人的代碼,然後對一些常用的功能使用通用名稱,其他的可以自己定義。例如delay就是一個延時函數,多數同學在書寫時,都會使用delay來代表延時函數,當然也有同學使用yanshi來直接用的,沒有問題,怎麼寫完全看自己。不過代碼如果還需要交到隊友手裡的話,最好還是約定好名稱的定義規則,以免造成代碼寫好了,卻讀起來很困難。

最後一行就是一個延時函數的聲明,記著,函數有返回值得需要在聲明中加上,不能省略。

這個是主函數,由於代碼量比較小,所以功能就都在主函數中進行書寫了。

P1=0xff是對P1埠的所有位置一,因為如果我們需要讀取埠上的數據,那麼就需要先將埠置一,這樣在程序中才會讀取到埠外電位的變化。這一步是不能省略的,儘管單片機上電就是高電位,我們也需要自己主動操作一次。

主要的邏輯功能就放在了循環函數中了,這樣可以保證,程序始終在程序中運行,不會跑飛。

第一個程序結構是消抖

if(key_Led==0)

{

keybuff=key_Led;

delay(6);

if(keybuff==key_Led)

{**執行文件**}

}

判斷按鍵是否按下,如果按下就把按鍵的值賦值給中間緩存變量,然後延時,我這裡的delay是2ms多一點,6次就是12ms,基本可以把抖動延時過去了。接著判斷中間緩存變量中保存的值與當前的按鍵狀態是否一致,如果一致,就執行接下來的動作,不一致,就跳出。

第二個結構是按鍵動作

switch(key)

{

case 0: P2=0xf1;break;//1111 0001

case 1: P2=0xf8;break;//1111 1000

case 2: P2=0xf4;break;//1111 0100

case 3: P2=0xf2;break;//1111 0010

}

while(key_Led==0);

這個也是一個判斷函數,不同與if,這個函數可以對函數中的語句進行依次判斷,一次執行多個動作,if只能執行一次,當然為了加快速度,我們在語句中添加了break,這個語句可以讓函數執行到這裡,直接跳出,不再執行接下來的語句,減少時間。

Switch中的key就是需要對比判斷的量,對比的數據是case後的0123這些數,這個可以自己規定,按程序要求來,不一定非要是0123,也可以是0xff這些,但有一點,需要是確定的數據,寫個變量a是不行的。

P2=0xf1就是需要執行的動作,這個要依據實際功能來說了,我們這裡的動作是關閉電源,所以,需要對P20輸出高電位,對P21、P22、P23輸出低電位。於是低四位就是0001.

最後一句的循環語句,是為了讓動作停止在開關按下的狀態,因為如果手指沒有抬起,按鍵就會一直保持等於零的狀態,程序如果有其他操作,那麼不添加這一句,程序就會反覆執行,造成程序異常,這一句也相當於在監測按鍵是否彈起,不彈起就不向下執行動作。

第三個結構是按鍵計數

key++;

if(key==4)

{

key=0;

}

這個是在按鍵彈起後,我們就對key加一,這個加一是在說明按鍵有了一次有效的按下動作,然後會判斷此時按鍵的按下次數有沒有超出規定的範圍,因為我們就只有四個動作,所以當key等於4的時候,我們之前的switch中沒有對應的語句,所以此時需要對key進行置零。

這樣在程序中走一圈之後,就會執行case 0 這一句,關掉所有埠。

延時函數,大同小異,每一個初學者都會經歷這個函數,他的主要作用就是在某些階段浪費程序的時間,達到延時目的。

While會循環判斷外部引入的t是否為真,也就是大於零。如果大於零就會反覆執行循環體中的語句。

而這個語句本身也是一個循環函數,for循環是先對變量i清零,然後判斷i是不是小於設定的數,這裡是200,如果小於200,就會執行加一操作,然後再次判斷是否小於200,知道i加到等於200,就會跳出循環。這樣while中的一個t減一就相當於程序跑了200次,於是就可以通過調節t的值來調整延時的時間。這個時間不是很精確,依據晶振頻率和程序的執行情況而定,與硬體也有關係,只能通過實際測試或者仿真得出一個大致的範圍,用在一些對時間要求比較松的場合還是可以的。有興趣也可以通過機器周期自己計算出來。

好了一個簡單的檯燈程序又寫了這麼長。仿真的話下篇說吧。

有問題或者疑問可以直接留言,我會回復或私信給你。

相關焦點

  • 自學單片機第十二篇上:首次測試設備——軟體測試
    由於準備比較多,講得儘可能詳細,所以分為兩篇,上篇是軟體測試,下篇是硬體測試。所有材料:1,安裝軟體的電腦,至少安裝了keil和ISP,keil用於編輯程序,ISP用於把程序下載到單片機中。沒有這兩個,我們即使首次測試成功,接下來的學習也會很艱難。
  • 自學單片機第十篇:基礎知識--萬用表的使用
    #自學單片機##自學單片機第九篇:基礎知識--計算機基礎操作自學單片機第八篇:基礎知識--C語言基礎自學單片機第七篇:基礎知識--物理<電學部分>
  • 孩視寶智能面加環讀寫檯燈評測:光線純淨柔和,有效控藍光
    功能體驗:模擬自然光,光線純淨柔和 光線方面,就筆者的使用感覺來說,孩視寶智能面加環讀寫檯燈的光線還是很接近我們白天自然光的。這使得檯燈能夠更好的還原自然光光譜,讓光線呈現更均衡,進而給孩子創造更健康的光環境。
  • 自學單片機第九篇:基礎知識--計算機基礎操作
    #自學單片機#往期文章自學單片機第八篇:基礎知識--C語言基礎自學單片機第五篇:TSC-ISP軟體自學單片機第四篇:proteus pro軟體
  • 角度可調和智能調光,支持米家和蘋果Homekit,護眼檯燈還能這樣
    一般大部分的家庭都會備有一款檯燈,主要用於讀書或者辦公所用,檯燈相比普通的白熾燈或者節能燈的光線要舒適一些。隨著檯燈技術的不斷更新換代,檯燈的功能也是逐漸豐富。常見的智能檯燈都可以通過手機聯動調整光線亮度或者色溫等,最近有幸入手了Yeelight光感智能檯燈,那麼這款智能檯燈到底如何?
  • 米家飛利浦檯燈3評測:光線均勻柔和護眼 自動調節補足光線
    近日,米家飛利浦檯燈3正式發售,據了解,米家飛利浦檯燈3將光照升級國標AA級,中心照度達到了1900lx,科技犬已經第一時間入手了這款新品,通過科技犬的實際上手體驗來快速了解它吧。
  • 眼爸爸檯燈體驗:光線均勻,更適合長時間學習
    使用檯燈不當甚至會出現脹眼、流淚的問題,一款好的檯燈就顯得尤為重要了。眼爸爸學習檯燈read1經過多位眼科醫生測試,光線更適合學生學習使用,各項數據達到了國家AA級核心指標。read1的包裝主色調為白色,包裝印有防兒童視線晃眼、防桌面光線過亮、防桌面光不均勻的宣傳特點,可以看出眼爸爸學習檯燈read1主打的就是專業護眼了。
  • 體驗|米家檯燈Pro:設計簡約光線溫柔
    對於經常需要晚上加班工作的人來說,一臺好用的檯燈絕對是不可缺少的。近日米家推出了升級款的米家檯燈。
  • 遠程控制的孩視寶智能檯燈,光線柔和護眼,享受華為智慧生活
    筆者體驗一番後,發現它照射出來的光線很柔和,給人舒適的讀寫體驗。後來筆者才發現原來光線之所以如此柔和,原因就是它使用216顆全光譜的LED燈珠,貼合自然光的光譜,還增加長波紅光和短波綠光,這樣能夠讓雙眼更加舒適,避免引起眼部的疲勞。
  • 呵護雙眼的簡約檯燈——360柔光檯燈SL1評測
    最近收到360推送消息,360新推出了LED 柔光檯燈,剛好孩子正在培養自覺看書的好習慣,正需要一個合格的護眼檯燈,作為一個擁有360全家桶的用戶,自然要上手測試體驗一番。 在操作上,輕觸一下點亮檯燈,默認點亮的是是白光模式,繼續點觸依次是暖光模式和自然光模式,長按觸控鍵調節當前模式下的燈珠亮度,逐漸變暗直至最暗;鬆手再次按住觸控鍵,光線逐漸變強直至最亮。分段調節很好的避免了使用的時候找不到最亮檔位的問題。 此外檯燈具有記憶功能,關燈後再次打開檯燈會自動切換到上次關閉時的模式,方便使用避免每次燈都需要調節明暗、色溫。
  • 原來主流智能檯燈如此強悍:購入網易嚴選皓月護眼檯燈,科技結晶
    再看一下,室內的頂燈開了之後的效果;雖然環境光線上來了,但是這種情況下,就感覺缺少了那種創作的氛圍。最後看一下,終極桌面是什麼樣的。加入了一個可以多向摺疊伸縮的護眼檯燈:網易嚴選皓月護眼檯燈。最大的感受,這是一款可以做護眼檯燈,也有著大範圍照射面積的檯燈,很實用。
  • 網易嚴選皓月護眼檯燈評測:真正專業智能檯燈,保護眼睛設計超強
    再看一下,室內的頂燈開了之後的效果;雖然環境光線上來了,但是這種情況下,就感覺缺少了那種創作的氛圍。加入了一個可以多向摺疊伸縮的護眼檯燈:網易嚴選皓月護眼檯燈。最大的感受,這是一款可以做護眼檯燈,也有著大範圍照射面積的檯燈,很實用。
  • 網易嚴選皓月護眼檯燈評測:真正專業智能檯燈,保護眼睛設計超強
    加入了一個可以多向摺疊伸縮的護眼檯燈:網易嚴選皓月護眼檯燈。最大的感受,這是一款可以做護眼檯燈,也有著大範圍照射面積的檯燈,很實用。,都是採用了兩段式可調的設計。而網易皓月檯燈,則是三段式可調,對比來說顯然實用性更強。燈罩不僅僅可以縱向調節方向,更是可以橫向旋轉,任意的使用方向都可以滿足。
  • 提供專業讀寫光線,AA級智能閱讀檯燈推薦
    近日,小米有品上架了一款歐普照明國AA級護眼檯燈,擁有專業讀寫光線、RG0豁免級藍光、Ra95高顯色等功能,目前正在參加小米有品秒殺活動,到手價159元,感興趣的朋友可以留意一下。新款元皓檯燈保留了元耀檯燈所有的功能。在配色上進一步優化,白色燈身+灰色邊點綴,過渡更自然。同時操作方式為觸控+按鈕,也能讓追求精緻的你更多-份選擇。45分鐘定時休息,智能提醒合理用眼。歐普護眼燈設置了45分鐘定時休息鍵,模擬上課時長,避免長時間用眼,時刻呵護寶貝的眼睛。
  • 護眼檯燈能給夜間辦公帶來哪些提升,明基WiT檯燈使用分享
    外觀展示Wit系列包含智能閱讀檯燈、兒童智能檯燈、智能屏幕掛燈、智能閱讀落地燈、智能鋼琴燈,而兩款檯燈按關節數量也會有型號不同,此次使用的是智能閱讀檯燈3關節款,檯燈包裝還是挺大的,重量有6公斤左右。打開包裝,內部組成還是挺簡單的,底座、燈體+力臂(以組裝好)、電源適配器、說明書+保修卡。
  • 我的桌面新夥伴,個性與實用,明基WiT智能閱讀護眼檯燈
    色溫在2700K~5700K之間可調,屏幕前的桌面區域,或者是用於閱讀時的相對暖色光,都可以很好的滿足。這一點相對屏幕掛燈還更加的舒服,也不會在低角度仰視時看到較亮的光線。長按燈體後方的圓環組件2秒就能開啟智能模式,通過自動偵測環境光線變化,來自動實時調節照明光線,讓眼睛總是處於剛剛好的光環境中。新調整後的WiT,在智能光線這裡做了更細緻的劃分。綠色光線是:智能屏幕閱讀模式。看電腦就用屏幕閱讀模式,燈體中間暗兩邊亮,保持整個工作檯的亮度均勻舒適。
  • 拒絕智商稅,護眼檯燈選擇指南
    對於每天都需要花一兩個小時完成家庭作業的孩子們,家中使用合適的檯燈對於保護孩子的眼睛尤為重要。家長究竟該怎麼選檯燈?使用檯燈該注意些什麼呢?01頻閃在購買檯燈時,拿出手機,打開相機對準檯燈,若手機屏幕出現明顯的柵格,則頻閃未達標。
  • 家用智能檯燈學問大,這篇解決你的選擇困難症
    近年來智能檯燈逐漸走入人們的家庭,面對眾多魚龍混雜的品牌,大家似乎不知道選什麼牌子的家用智能檯燈比較好。今天就介紹一下明基WiT的3款智能檯燈,看完保證解決你的選擇困難症。這款智能檯燈的智能閱讀模式,會根據周圍的環境光來調節最適合的光線。想手動調節光線亮度,也不用擔心調節出的光線亮度不合適,它的智能光線判斷功能,會在燈頭按鈕的內圈示意燈提示:藍色太亮,綠色合適,紅色太暗。家長們既不用擔心孩子忘記開關燈,也不用擔心光線不合適,MindDuo兒童智能檯燈可以說是家長的「貼心智能小幫手」。
  • 檯燈什麼牌子的比較好,柏曼檯燈質量怎麼樣測評
    柏曼檯燈的包裝很紮實,盒子採用5層瓦楞紙,結實不易破損。內裡採用定製的泡沫包覆,挖槽將檯燈各組件嵌入其中,有效保證運輸安全。檯燈主要分為三塊:底座、燈頭、變壓器及電源線。整體金屬材質為主,黑色銀色相間,非常有質感。另隨附說明書、質保卡以及一個內六角小扳手。
  • 還不知道孩子的護眼檯燈買那款?試試明基親子共度檯燈MindDuo吧
    先看看我家檯燈的變遷史除了裝飾用的檯燈外,功能性的檯燈算上新到手的明基,一起也有四臺啦最老的元老級已經不能點亮,我真的是個念舊的人,這樣的檯燈還不扔留著過年?另外三款按照購買的先後順序分別是:不知名某牌,光源是螢光燈杆式的松下這款是大牌高質的普通檯燈,也不適合孩子學習,不是護眼檯燈明基MindDuo這款是剛剛拿到的親子伴讀護眼檯燈看看新到手的明基(BenQ) MindDuo這款檯燈的外形很特別,與我們日常使用的檯燈都不一樣,燈頭是彎月形的,而我們日常使用的一般都是燈杆式,