2020蓝桥杯省赛单片机2
盡量不用XBYTE[]寫法
XBYE寫法由于暫時(shí)不了解其內(nèi)部工作原理,在國(guó)信長(zhǎng)天2020版本的51板子上 P42 P44與按鍵相連。如果用XBYTE數(shù)碼管顯示雖然方便但如果在中斷中有矩陣鍵盤寫法的按鍵掃描,使P42 P44強(qiáng)制拉低或拉高 會(huì)出現(xiàn)亂七八糟的的不可預(yù)判的BUG,如數(shù)碼管不可顯示 矩陣鍵盤失效。
推薦直接用P端口寫法,在架構(gòu)處列出
盡量不用三行按鍵掃描
三行按鍵掃描這種大佬級(jí)的玩意,發(fā)明的人固然兩個(gè)字 NB 但如果P3其他端口有PWM(特別是P34 專門空出來接排針) 這個(gè)三行按鍵掃描就是一個(gè)BUG 里面的trg 和 cont值就不是可以預(yù)判的了,推薦使用國(guó)信長(zhǎng)天的矩陣鍵盤程序,超好用
三行按鍵掃描:
定時(shí)器優(yōu)先級(jí)問題
串口>PWM>數(shù)碼管顯示(數(shù)碼管顯示最低)
規(guī)范命名,代碼間隔等寫法
與時(shí)代接軌,與其他面向?qū)ο缶幊陶Z(yǔ)言接軌
函數(shù):小寫_小寫_小寫()
如: void oled_show(void);
變量:小寫直接組合起來
如:timebuff[0]
#define:全部大寫
如:#define CHWEI(); P2 &= 0x1f; P2 |= 0xbf;
當(dāng)然單詞太長(zhǎng)了可以簡(jiǎn)寫
藍(lán)橋杯省賽一般架構(gòu)
#include "headfile.h"#define CHWEI(); P2 &= 0x1f; P2 |= 0xc0; #define CHDUAN(); P2 &= 0x1f; P2 |= 0xe0; #define CHLED(); P2 &= 0x1f; P2 |= 0x80; #define CH0(); P2 &= 0x1f;void main(void) {初始化關(guān)閉蜂鳴器和LED燈初始化定時(shí)器(誰重要誰先開)while (1){if (keyval == xxxx){while (keyval == xxxx); xxxxxxxxxxxx}else if (keyval == xxxx){while (keyval == xxxx);xxxxxxxxxxxx}} }void isrt_imer0(void) {if (!(ms%5)) key_scan();if (flag == 1) time_show();else if (flag == 2) temp_show();else off_show(); }void temp_show(void) {static uchar i = 0;CHDUAN();P0 = 0xff;CHWEI();P0 = (0x01 << i);CHDUAN();P0 = tempbuff[i];CH0();if (++i > 7) i = 0; }void read_keyboard(void) {static unsigned char hang;static unsigned char key_state=0; switch(key_state){case 0:{P3 = 0x0f; P42 = 0; P44 = 0;if(P3 != 0x0f) //有按鍵按下key_state=1; }break;case 1:{P3 = 0x0f; P42 = 0; P44 = 0;if(P3 != 0x0f) //有按鍵按下{if(P30 == 0)hang = 1;if(P31 == 0)hang = 2;if(P32 == 0)hang = 3;if(P33 == 0)hang = 4;//確定行 switch(hang){case 1:{P3 = 0xf0; P42 = 1; P44 = 1;if(P44 == 0) {key_value=0;key_state=2;}else if(P42 == 0) {key_value=1;key_state=2;}else if(P35 == 0) {key_value=2;key_state=2;}else if(P34 == 0) {key_value=3;key_state=2;}}break;case 2:{P3 = 0xf0; P42 = 1; P44 = 1;if(P44 == 0) {key_value=4;key_state=2;}else if(P42 == 0) {key_value=5;key_state=2;}else if(P35 == 0) {key_value=6;key_state=2;}else if(P34 == 0) {key_value=7;key_state=2;}}break;case 3:{P3 = 0xf0; P42 = 1; P44 = 1;if(P44 == 0) {key_value=8;key_state=2;}else if(P42 == 0) {key_value=9;key_state=2;}else if(P35 == 0) {key_value=10;key_state=2;}else if(P34 == 0) {key_value=11;key_state=2;}}break;case 4:{P3 = 0xf0; P42 = 1; P44 = 1;if(P44 == 0) {key_value=12;key_state=2;}else if(P42 == 0) {key_value=13;key_state=2;}else if(P35 == 0) {key_value=14;key_state=2;}else if(P34 == 0) {key_value=15;key_state=2;}}break;} }else{key_state=0; } }break;case 2: {P3 = 0x0f; P42 = 0; P44 = 0;if(P3 == 0x0f) //按鍵放開key_state=0; }break;} }官方給的代碼的坑
①讀寫EEPROM記得完成一次加點(diǎn)delay
②DS18B20單總線延遲那個(gè)函數(shù)要在while 里面寫個(gè)
for (i = 0; i < 12; i++)
③從STC_ISP復(fù)制的定時(shí)器代碼 要注意晶振大小和 記得加!!!
藍(lán)橋杯歷史
1-7屆省賽中有客觀題、AD畫圖、程序題 部分,所以說程序部分比較簡(jiǎn)單
8屆及以后僅有程序和客觀題 所以說程序題要難些
也有人說 第十屆省賽難度 = 第七屆國(guó)賽
總結(jié)
以上是生活随笔為你收集整理的2020蓝桥杯省赛单片机2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 64.qt quick-qml使用高德地
- 下一篇: win10安装轻量级虚拟机(三)