這是我備考省賽的時候總結的錯誤點和創新點
那個時候是用來提醒自己的,現在分享給你們看^_^
一考點



二注意點
- 記得初始化Y4,Y5,Y6,Y7(所學)→STC15系列頭文件概括
- 注意在主函數中,重新定義跟隨模式(要不然亂七八糟)→初始化進化,鎖存器開后關閉
- 注意初始化的內容,若多次使用,可變為一個函數
- 操作led,數碼管,蜂鳴器時,要打開hc573鎖存器使能端打開,才能控制,后注意關閉
- 操作矩陣鍵盤和NE555的時候記得注意跳線帽
- 延時函數只有在led和獨立按鍵延時時使用
- 延時函數缺點:單獨進行且死板(類似拖堂);定時器:定時與計數可以同時進行(類似下課),靈活
- 乘除取余注意:%10取數字最后一位數(一個0);/10取最后一個數字之前的數字(一個0)
- 軟件模擬:魔法棒-DEBUG-左側所有√打上-點擊DEBUG-點擊L1添加邏輯分析-運行
- 賽點資源包閱讀:底層文件的引腳(運行代碼,找到未定義的引腳)+原理圖自己編寫+頭文件引用;頭文件自己編寫;新版onewire.h不需要自己再將t*12
- Ds1302的問題,write()和read()函數的存放位置
三歷年考題本人錯誤點
- 數碼管的數字要顯示0,不需要再用三目運算符特意強調(ds1302實時時鐘)
- 燈的點亮是0,所以寫LED函數是的時候是temp&=~(0x01<<pos)
- 定時器時間太短,1ms最好
- Ds1302的數碼管不用特別顯示0
- Ds1302的read 寫進要運行的代碼即數碼管顯示上面
- 按鍵消抖時間小于十毫秒display_dly<10ms(放在開頭)
- 數碼管顯示smg_dly<300,LED顯示,數據采集,collect_dly<500
- 如果要用到定時器中斷,就打開stc的選項,(比如測頻率的就是定時器0計數不打開,定時器1計時打開)
- Ds18b20是溫度傳感器,需要加入時間750ms確保溫度的正確讀出,數值比較大,所以用int類型,先讀低八位,再讀高八位,后整合十六位,再確定小數點(幾位數字)
- 用矩陣鍵盤的時候,注意大括號的else if(** && **)內容與一開始賦值1的對應
- Ds1302每次數值改變,記得重新寫入
- 獨立按鍵是BTN模式,矩陣鍵盤是KBD模式
- AT24C02中數值改變,每次都要重新讀取
- Ds1302中,sbit的地址是連續的P21,P23,P17
- 矩陣鍵盤賦值,用數組進行存儲,下標進行++
有函數名基本相同,需要改變自定義函數名
函數定義有一個參數,而使用的時候,未加
- 當用矩陣鍵盤輸入數據(數組存放),在數碼管顯示出來,并要求數碼管高位熄滅或者三目運算符
注意區間
- 溫度測量 temp*0.0625 是23℃?? temp*0.625是236℃
- 超聲波測距離,可以直接先用SPI波特率計算,再加putchar()函數即可
- 若用按鍵決定發射串口,再按鍵位置置一個標志位,再collect()函數內printf(),注意printf發射數據的格式
- 串口通信,先確定TX和RX的引腳位置,再用延時函數確定12us的延時,再確定5個周期的發射超聲波,在讀取超聲波函數內,先CMOD=0,定時初始值位0,在CR=1開始計時接收到的超聲波時間while(!CF && RX);CR=0;
- 取模不可以是浮點數
- 若要PCF8591顯示光敏電阻或者電位器的倆位小數(三位數),
就light/RB2=read(0x01/0x03)/51.0*100
- 編程的時候若出現一堆錯誤,查看第一行,是否是中文標點符號輸入
- 若有界面的切換
不重復觸發,說明上一個數值必須與其相反
新的時間,放到索引1
二維數組,轉換每一個數組時間的位置
- 設定主界面與觸發界面倆個有關聯的定義maincode,maincode=0,主界面,maincode=1,觸發界面
- 界面之間有防止重復觸發的可能性,定義一個標志位workflag,在定時器里面
- 歷史查詢界面共有三個,采用二維數組,并且改變觸發時間的位置,進行準換改變
1.用數組下標來決定索引值
2.時間不可能顯示24小時,以此來決定二維數組的初始狀態
3.以每一位二維數組的開頭做標志位,Time_set[0,1,2][0]=0x24都未采集到數據
采集到數據,用循環來展現全部SMG[2,3,4,5,6,7]index與索引相對應
- PCF8591同時讀取光敏和電位器電壓,需將倆個地址互換即可
- 判斷字符串是否相等 strcmp(BUF,“open”)==0字符串相等#include "string.h"
- 當一個界面有倆個參數需要按鍵進行改變,設置一個標志位,在按鍵控制函數里,進行編寫