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