日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

第十一届 蓝桥杯 单片机设计与开发项目 决赛

發(fā)布時(shí)間:2024/1/8 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 第十一届 蓝桥杯 单片机设计与开发项目 决赛 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

第十一屆 藍(lán)橋杯 單片機(jī)設(shè)計(jì)與開發(fā)項(xiàng)目 決賽

    • 題目
    • 源碼
    • 賽題總結(jié)
      • 1.界面切換
      • 2.參數(shù)生效
      • 3.LED顯示

題目





源碼

#include <STC15F2K60S2.H> #include <intrins.h> #include "iic.h" #include "ds1302.h" #include "onewire.h" #define KEYPORT P3 #define u8 unsigned char #define u16 unsigned intu8 code t_display[]={ //標(biāo)準(zhǔn)字庫(kù) // 0 1 2 3 4 5 6 7 8 9 A B C D E F0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71, //black - H J K L N o P U t G Q r M y0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46}; //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1u8 code T_COM[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //位碼u8 key_table[] = {0x88,0x84,0x48,0x44};u8 screen_table[] = {16,16,16,16,16,16,16,16};sbit buzzer = P0^6; sbit relay = P0^4;u8 readdata,keypress; u8 Cont,Trg; u8 shi,fen,miao; u8 shi_BCD,fen_BCD,miao_BCD; u8 mode_flag;//模式切換標(biāo)志位 u8 adc_val;//電壓值0-255 u8 LED;//默認(rèn)參數(shù) char time_set = 17char temperature_set = 25; char led_set = 4;//變化參數(shù)中間值 char time_temp = 17; char temperature_temp = 25; char led_temp = 4;float temperature;//溫度值 float volt;//電壓值0-5Vbit key_flag; bit read_flag; bit set_flag;//數(shù)據(jù)和參數(shù)界面切換標(biāo)志位 bit light_flag;//亮暗等級(jí) bit change_flag;//切換界面標(biāo)志位void Init()//初始化 {P2=0x80;P0=0xff;P2=0x00;P2=0xe0;P0=0xff;P2=0x00;P2=0xa0;buzzer = 0; relay = 0;P2=0x00; }void key_read()//矩陣鍵盤 {KEYPORT = 0xf0;P44 = 1;P42 = 1;P36 = P42;P37 = P44;keypress = KEYPORT;KEYPORT = 0x0f;P44 = 0;P42 = 0;readdata = (KEYPORT | keypress) ^ 0xff;Trg = readdata & (readdata ^ Cont);Cont = readdata ; }//T0初始化 void Timer0Init(void) //1毫秒@12.000MHz {AUXR |= 0x80; //定時(shí)器時(shí)鐘1T模式TMOD &= 0xF0; //設(shè)置定時(shí)器模式TL0 = 0x20; //設(shè)置定時(shí)初值TH0 = 0xD1; //設(shè)置定時(shí)初值TF0 = 0; //清除TF0標(biāo)志TR0 = 1; //定時(shí)器0開始計(jì)時(shí)ET0 = 1;EA = 1; }/* Timer0 interrupt routine */ void tm0_isr() interrupt 1 {static int smg_count = 0, key_count = 0,read_count = 0,light_count = 0,i = 0;smg_count++;key_count++;read_count++;if(smg_count == 1){smg_count = 0;P2=0xe0;P0=~t_display[screen_table[i]];P2=0x00;P2=0xc0;P0=T_COM[i];P2=0x00;i++;if(i==8)i=0;}if(key_count == 10){key_count = 0;key_flag =1;}if(read_count == 200){read_count =0 ;read_flag = 1;}if(light_flag){if(++light_count == 3000){light_count =0;LED |= 4;}}else{if(++light_count == 3000){light_count = 0;LED &= ~4;}} }void main() {Init();Timer0Init();set_sfm(16,59,50);//RTC時(shí)鐘上電默認(rèn)時(shí)間while(1){EA = 0;//讀取時(shí)鐘數(shù)據(jù)shi_BCD = Read_Ds1302_Byte ( 0x85 );fen_BCD = Read_Ds1302_Byte ( 0x83 );miao_BCD = Read_Ds1302_Byte ( 0x81 );EA = 1;shi = (((shi_BCD >> 4) & 0x07) * 10 ) + (shi_BCD & 0x0f);fen = (((fen_BCD >> 4) & 0x07) * 10 ) + (fen_BCD & 0x0f);miao = (((miao_BCD >> 4) & 0x07) * 10 ) + (miao_BCD & 0x0f);if(read_flag){read_flag = 0;temperature = rd_temperature();EA = 0;adc_val = read_adc(0x01);EA = 1;if(adc_val < 255 / 2)//暗{light_flag = 1;}else//亮light_flag = 0;volt = adc_val / 255.0 * 5;}if(key_flag){key_flag = 0;key_read();if(Trg == key_table[0])//s4{if(set_flag == 1)//當(dāng)前處于參數(shù)界面{change_flag = 1;}set_flag = ~set_flag;//數(shù)據(jù)和參數(shù)界面切換if(change_flag == 1 && set_flag == 0)//參數(shù)界面->數(shù)據(jù)界面:變化后的參數(shù)生效{time_set = time_temp;temperature_set = temperature_temp;led_set = led_temp;}mode_flag = 0;}if(Trg == key_table[1])//s5{mode_flag++;if(mode_flag == 3)mode_flag = 0;}if(Trg == key_table[2])//s8:-{if(set_flag == 1){if(mode_flag == 0){time_temp--;if(time_temp < 0){time_temp = 23;}}else if(mode_flag == 1){temperature_temp--;if(temperature_temp < 0){temperature_temp = 99;}}else if(mode_flag == 2){led_temp--;if(led_temp < 4){led_temp = 8;}} }}if(Trg == key_table[3])//s9:+{if(mode_flag == 0){time_temp++;if(time_temp > 23){time_temp = 0;}}else if(mode_flag == 1){temperature_temp++;if(temperature_temp > 99){temperature_temp = 0;}}else if(mode_flag == 2){led_temp++;if(led_temp > 8){led_temp = 4;}} }}if(set_flag == 0)//數(shù)據(jù)界面{if(mode_flag == 0)//時(shí)鐘顯示{screen_table[0] = shi / 10;screen_table[1] = shi % 10;screen_table[2] = 17;screen_table[3] = fen / 10;screen_table[4] = fen % 10;screen_table[5] = 17;screen_table[6] = miao / 10;screen_table[7] = miao % 10;}else if(mode_flag == 1)//溫度顯示{screen_table[0] = 12;screen_table[1] = 16;screen_table[2] = 16;screen_table[3] = 16;screen_table[4] = 16;screen_table[5] = ((u8)temperature) / 10;screen_table[6] = (((u8)temperature) % 10) + 32;screen_table[7] = ((u8)(temperature * 10)) % 10;}else if(mode_flag == 2)//LED顯示{screen_table[0] = 14;screen_table[1] = 16;screen_table[2] = (u8)volt + 32;screen_table[3] = ((u8)(volt * 10)) % 10 ;screen_table[4] = ((u16)(volt * 100)) % 10;screen_table[5] = 16;screen_table[6] = 16;screen_table[7] = light_flag;}}else//參數(shù)界面{if(mode_flag == 0)//時(shí)鐘參數(shù){screen_table[0] = 24;screen_table[1] = 1;screen_table[2] = 16;screen_table[3] = 16;screen_table[4] = 16;screen_table[5] = 16;screen_table[6] = time_temp / 10;screen_table[7] = time_temp % 10;}else if(mode_flag == 1)//溫度參數(shù){screen_table[0] = 24;screen_table[1] = 2;screen_table[2] = 16;screen_table[3] = 16;screen_table[4] = 16;screen_table[5] = 16;screen_table[6] = temperature_temp / 10;screen_table[7] = temperature_temp % 10;}else if(mode_flag == 2)//LED參數(shù){screen_table[0] = 24;screen_table[1] = 3;screen_table[2] = 16;screen_table[3] = 16;screen_table[4] = 16;screen_table[5] = 16;screen_table[6] = 16;screen_table[7] = led_temp;} }/*************************LED顯示**************************/if(shi >= 8){if(shi >= time_set && shi <= 23){LED |= 1;}else{LED &= ~1;}}else{if(shi >= time_set && shi < 8){LED |= 1;}else{LED &= ~1;}}if(temperature < temperature_set){LED |= 2;}else{LED &= ~2;}if(light_flag == 1){if(led_set == 4){LED |= 8;LED &= ~0x10;LED &= ~0x20;LED &= ~0x40;LED &= ~0x80;}else if(led_set == 5){LED &= ~8;LED |= 0x10;LED &= ~0x20;LED &= ~0x40;LED &= ~0x80;}else if(led_set == 6){LED &= ~8;LED &= ~0x10;LED |= 0x20;LED &= ~0x40;LED &= ~0x80;}else if(led_set == 7){LED &= ~8;LED &= ~0x10;LED &= ~0x20;LED |= 0x40;LED &= ~0x80;}else if(led_set == 8){LED &= ~8;LED &= ~0x10;LED &= ~0x20;LED &= ~0x40;LED |= 0x80;}}else{LED &= ~8;LED &= ~0x10;LED &= ~0x20;LED &= ~0x40;LED &= ~0x80;}P2=0x80;P0 = ~LED ; P2=0x00;//點(diǎn)亮LED} }

賽題總結(jié)

1.界面切換


解法代碼

if(Trg == key_table[0])//s4{set_flag = ~set_flag;//數(shù)據(jù)和參數(shù)界面切換mode_flag = 0;//切換后默認(rèn)為時(shí)間界面}

2.參數(shù)生效


解法代碼

if(Trg == key_table[0])//s4 {if(set_flag == 1)//當(dāng)前處于參數(shù)界面{change_flag = 1;}set_flag = ~set_flag;//數(shù)據(jù)和參數(shù)界面切換if(change_flag == 1 && set_flag == 0)//參數(shù)界面->數(shù)據(jù)界面:變化后的參數(shù)生效{time_set = time_temp;temperature_set = temperature_temp;led_set = led_temp;}mode_flag = 0; }

關(guān)鍵在于記錄從參數(shù)界面到數(shù)據(jù)界面切換的標(biāo)志位,按下s4時(shí)當(dāng)前處于參數(shù)界面,按下后切換為數(shù)據(jù)界面

3.LED顯示


代碼接法

if(shi >= 8){if(shi >= time_set && shi <= 23){LED |= 1;}else{LED &= ~1;}}else{if(shi >= time_set && shi < 8){LED |= 1;}else{LED &= ~1;}}

分為兩種情況:
(1)當(dāng)前時(shí)間大于8:00,即就是處于8:00-23:59之間,需要判斷(shi >= time_set && shi <= 23);

(2)當(dāng)前時(shí)間小于8:00,即就是處于0:00-8:00之間,則判斷(shi >= time_set && shi < 8);

特殊情況
當(dāng)shi_set和shi相等時(shí),簡(jiǎn)單理解可以這樣說(shuō):從今天的8:00到下一天的8:00,全天L1都是點(diǎn)亮的。

總結(jié)

以上是生活随笔為你收集整理的第十一届 蓝桥杯 单片机设计与开发项目 决赛的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。