第四屆藍橋杯省賽 智能灌溉系統
- 首先,新建一個keil工程
- 一定記得main.c,iic.c要添加到檔案夾中…!

圖一
否則檔案將無法執行,
(ps: 有時候是單片機板子的問題,如下圖,當時的情況是led燈全亮了,smg不亮)(我有什么辦法,俺只能挨個排查呀!!)(排查現有模塊,發現中斷√ smg√ 初始化√)(只有添加一些絕對正確的特征判斷程式的執行情況,就比如讓特定的LED燈亮)
作用:可以判斷程式執行了哪些陳述句,未執行哪些陳述句

如果發現LED燈不亮
(只有兩種可能:
1.程式未執行到這里(不可能!!!!)
2.板子壞了)然后再繼續判斷
······
3. 遇見按鍵一次,自加多次的問題.
你能看出是什么錯誤麼?
現狀描述:
這也太神奇了吧,同樣都是damp–,
一個按鍵一次,自減一次;
另一個,按鍵一次,自減多次;

真的過于神奇:沒注釋的部分會按鍵一次自減多次
注釋的部分就是正常的
這里是答案和問題的分割線---------------------------------------------------------------
揭秘:
是因為把cont 錯寫成了count
這是兩個不同的變數
由這個事件也可以得出
以后百度搜不到的問題,也許你目前想的這里并沒有問題
再去順藤摸瓜的尋找一下
可能是其他可能的錯誤
第五屆 簡易溫度檢測
傳送門:詳細代碼如下(也可以私聊我要)
https://download.csdn.net/download/qq_45720531/12914563




多個 if 與 else if的問題
1,從字面上理解if為如果,就是如果這種情況,如果那種情況,
2,else if 不是上一個條件的前提下,如果是這個條件,
3,區別1:if無論是否滿足條件都會向下執行,知道程式結束,else if 滿足一個條件就會停止執行,
4,區別2:由于if都會執行一遍,則可能會同一個需要判斷的事件,會進入2個if陳述句中,出現錯誤,而else if就不會發生這樣的事情,

這樣寫成else if的形式,就不容易程式同時執行兩次
區域變數初始值的問題
- 有關按鍵不靈敏的問題

沒有寫key = 0,就死翹翹了…,后面的判斷情況不起作用,
原因:
C語言中,定義區域變數時如果未初始化,則值是隨機的,這是為什么呢?
定義區域變數,其實就是在堆疊中通過移動堆疊指標來給程式提供一個記憶體空間和這個區域變數名系結,因為這段記憶體空間在堆疊上,而堆疊記憶體是反復使用的(臟的,上次用完沒清零的),所以說使用堆疊來實作的區域變數定義時如果不顯式初始化,值就是臟的,
c語言中只有區域變數在未賦初值時,才是亂數,全域變數和靜態變數未賦初值時編譯器會自動將其初始化為0,區域變數是分配在堆疊上的,而全域變數和靜態變數是分配在資料段中的,這個跟程式的記憶體分配是有關系的,
- 燈光閃爍時間問題

燈光閃爍是一個狀態,所以標志位只能用~ 取反符號
也就是每隔200ms就從0變成1,1變成0…
4.讀溫度的時間不能太長
12位解析度的傳感器,讀一次溫度需要750ms
但這次的問題是由于
800ms讀不出來,我來試試300ms呢
這是10ms讀取一次的效果:
3000ms的讀取效果:
數碼管無閃爍
但是led幾乎沒亮


偶然間發現沒有空格就可以亮
然而
經過很多次的測驗,發現很多時候不是空格的問題,
因此,控制變數很重要,要記錄下倆對應的程式和現象
(不要同時更改兩個地方的程式,除非你十分確定它是錯的)

結果:
400ms的不能亮,800ms能亮
(猜測1:是讀取溫度需要750ms,恰好跳過了中斷
猜測2: 400ms太短,程式執行到這里來的時候,標志位又變了
(大概程式就是再寫了溫度后,LED不太正常的亮了)
{所以以后不能隨意的更改代碼,改一次,一定要記住更改內容,變化物件!)
揭秘:

800 是200,400,800的公倍數,如果用if else陳述句,就會造成選擇結構,滿足其中一個,就不會進入另一個繼續判斷,
就會造成flag標志位不產生變化,
一個優秀的程式員對這些簡單的陳述句用的是爐火純青,淋漓盡致啊
**小問題:**單片機進入中斷后,關閉中斷,這時如果已經進入中斷,中斷會繼續執行嗎?
答: 會
第六屆:溫度記錄器
1
將10進制轉化為BCD碼,記得各位的數字是%16喔,不然會轉換錯誤,
2.switch某個符合條件的case后不加break,為什么會執行后面不符合case的陳述句?

下圖才正確:

揭秘:
Switch-Case 陳述句中一旦匹配case條件,無論后面的case陳述句是否匹配,都會執行case后面的命令,不行可以試試喔~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/165130.html
標籤:AI
上一篇:你們覺得哪家公司網站建設比較好?
下一篇:安全日記—零基礎開始學安全(2)
