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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

11届蓝桥杯单片机设计与开发决赛

發布時間:2024/1/8 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 11届蓝桥杯单片机设计与开发决赛 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第一次嘗試做國賽題目(還行)

?

?

?

?

?

?

?

?

?main.c

#include <sys.h> #include "ds1302.h" #include "onewire.h" #include "iic.h"void OperateLed(); void main() {InitSystem();Set_DS1302();Timer0Init();while(1){if(temper_flag){temper_flag = 0;Temper_Get();}if(dac_flag){dac_flag = 0;ReadAIN1();}volt = rd1 * 1.96;Get_DS1302();KeyScans();DisplaySMG();OperateLed();KeyScans();} }void OperateLed() {if(interface == 1 || inter == 0)hour_pp = hour_p;if(interface == 2 || inter == 0)temper_pp = temper_p;if(temp < temper_pp * 10)Led(2,0);elseLed(2,1);if(((Time[2] >= hour_pp) || (Time[2] <= 8)))Led(1,0);elseLed(1,1);if(led)Led(3,0);elseLed(3,1);if(volt == 0)status = 1;elsestatus = 0;}

?sys.c

#include <sys.h> #include "onewire.h"void Select_74HC138(uchar channel) {switch(channel){case 0: P2 = P2 & 0X1F; break;case 4: P2 = (P2 & 0X1F) | 0X80; break;case 5: P2 = (P2 & 0X1F) | 0XA0; break;case 6: P2 = (P2 & 0X1F) | 0XC0; break;case 7: P2 = (P2 & 0X1F) | 0XE0; break;} }void InitSystem() {uchar i;Select_74HC138(4);P0 = 0XFF;Select_74HC138(5);P0 = 0X00;Select_74HC138(0);for(i = 0; i < 60; i++){Temper_Get();} }void Delay(uint ms) {uint i;for(ms; ms > 0; ms--)for(i = 921; i > 0;i--); }//void Led(uchar dat) //{ // P0 = dat; // Select_74HC138(4); // Select_74HC138(0); //}uchar count = 0; uchar temper_flag = 0; uchar dac_flag = 0; uchar t0 = 0,t1 = 0; uchar led = 0;void Timer0Init() //20ms {AUXR &= 0x7F;TMOD &= 0xF0;TL0 = 0xE0;TH0 = 0xB1;TF0 = 0;TR0 = 1;EA = 1;ET0 = 1; }void ServiceTimer0() interrupt 1 {count++;if(count % 25 == 0) //0.5s{dac_flag = 1;}if(count % 50 == 0) // 1s{temper_flag = 1;count = 0;}if(status){t1++;if(t1 == 150) //3s == 3000ms (20ms){led = 1;t1 = 0;}}if(status == 0){t0++;if(t0 == 150){led = 0;t0 = 0;}} }void Led(uchar who,status) //主要是防止第二次按鍵按下的時候,會出錯 {static uchar temp; //過渡狀態uchar js; //狀態switch(status){case 0: //打開指定的LEDtemp = temp | _crol_(0X01,who-1); // temp = 0000 0000 | 0000 0001 = 0000 0001P0 = ~temp; //P0 = 1111 1110break;case 1:if(who == 0xff) //熄滅全部的LED燈{P0 = 0xff;temp = 0;}else //熄滅指定的LED燈{js = (~temp) | _crol_(0X01,who-1); //js = 1111 1110 | 0000 0001 = 1111 1111//第二次按滅 js = 1111 1111 | 0000 0001 = 1111 1111 temp == ~js;所以讓P0直接 == ~temp;if(temp != (~js)) //0000 0001 != 0000 0000temp = ~js; //temp = 0000 0000P0 = ~temp; //P0 = 1111 1111}break;case 2: //按照pos的值整體點亮LEDP0 = ~who;temp = who;break;default: break;}Select_74HC138(4);Select_74HC138(0); }

?key.c

#include <sys.h>void KeyScans() {h1 = 0;h2 = l1 = l2 = 1;if(l1 == 0) //s5{interface = (interface + 1) % 3;while(l1 == 0){DisplaySMG();OperateLed();}}if(l2 == 0) //s9{if(inter == 1){if(interface == 0){hour_p++;if(hour_p == 24)hour_p = 0;}else if(interface == 1){ // hour_pp = hour_p;temper_p++;if(temper_p == 99)temper_p = 99;}else if(interface == 2){ // temper_pp = temper_p;pos++;if(pos == 9)pos = 4;} // if(interface != 0) // hour_pp = hour_p; // if(interface != 1) // temper_pp = temper_p;}while(l2 == 0){DisplaySMG();OperateLed();}}h2 = 0;h1 = l1 = l2 = 1;if(l1 == 0) //s4{inter = (inter + 1) % 2;if(inter == 0 || inter == 1)interface = 0;while(l1 == 0){DisplaySMG();OperateLed();}}if(l2 == 0) //s8{if(inter == 1){if(interface == 0){hour_p--;if(hour_p == -1)hour_p = 23;}else if(interface == 1){temper_p--;if(temper_p == -1)temper_p = 0;} else if(interface == 2){pos--;if(pos == 3)pos = 8;}}while(l2 == 0){DisplaySMG();OperateLed();}} }

nixie.c

#include <sys.h> #include "ds1302.h" #include "onewire.h" #include "iic.h"uchar code nixie[] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80, 0X90,0X40, 0X79, 0X24, 0X30, 0X19, 0X12, 0X02, 0X78, 0X00, 0X10, 0XC6, 0X86, 0X8C, 0XBF, 0XFF}; // C E P - 滅uint volt = 0; uchar status = 0; //亮暗狀態 uchar hour_p = 17; uchar temper_p = 20; uchar pos = 4; uchar inter = 0; uchar interface = 0; uchar hour_pp = 17; uchar temper_pp = 20; void DisplayBit(uchar pos,value) {P0 = 0X00;Select_74HC138(6);Select_74HC138(0);P0 = nixie[value];Select_74HC138(7);Select_74HC138(0);P0 = _crol_(0x01,pos);Select_74HC138(6);Select_74HC138(0);Delay(1); }void DisplayTime() {DisplayBit(0, Time[2] / 10);DisplayBit(1, Time[2] % 10);DisplayBit(2, 23);DisplayBit(3, Time[1] / 10);DisplayBit(4, Time[1] % 10);DisplayBit(5, 23);DisplayBit(6, Time[0] / 10);DisplayBit(7, Time[0] % 10); }void DisplayTemper() {DisplayBit(0,20);DisplayBit(5,temp / 100);DisplayBit(6,temp / 10 % 10 + 10);DisplayBit(7,temp % 10);P0 = 0X00;Select_74HC138(6);Select_74HC138(0); }void DisplayVolt() {DisplayBit(0,21);DisplayBit(2,volt / 100 + 10);DisplayBit(3,volt / 10 % 10);DisplayBit(4,volt % 10);DisplayBit(7,status); }void DisplayTime_p() {DisplayBit(0,22);DisplayBit(1,1);DisplayBit(3,hour_pp / 10);DisplayBit(4,hour_pp % 10);DisplayBit(6,hour_p / 10);DisplayBit(7,hour_p % 10); }void DisplayTemper_p() {DisplayBit(0,22);DisplayBit(1,2);DisplayBit(3,temper_pp / 10);DisplayBit(4,temper_pp % 10);DisplayBit(6,temper_p / 10);DisplayBit(7,temper_p % 10); }//uchar stat_led = 0xff;void DisplayLed_p() {DisplayBit(0,22);DisplayBit(1,3);DisplayBit(7,pos);if(status == 1 && led == 1){Led(_crol_(0x01,pos - 1),2); // Led(pos,0);} // else if(status == 0 && led == 0)else if(status == 0){Led(4,1);Led(5,1);Led(6,1);Led(7,1);Led(8,1);}}void DisplaySMG() {if(inter == 0){switch(interface){case 0: DisplayTime(); break;case 1: DisplayTemper(); break;case 2: DisplayVolt(); break;}}else if(inter == 1){switch(interface){case 0: DisplayTime_p(); break;case 1: DisplayTemper_p(); break;case 2: DisplayLed_p(); break;}}}

sys.h

#ifndef _SYS_H_ #define _SYS_H_#include <STC15F2K60S2.H> #include <intrins.h>sbit l1 = P4^4; sbit l2 = P4^2; sbit h1 = P3^2; sbit h2 = P3^3;#define uchar unsigned char #define uint unsigned intextern unsigned char inter; extern unsigned char interface; extern unsigned char hour_p; extern unsigned char temper_p; extern unsigned char pos; extern unsigned char temper_flag; extern unsigned char dac_flag; extern unsigned char status; extern unsigned char led; extern unsigned int volt; extern unsigned char hour_pp; extern unsigned char temper_pp;//sys.c void Select_74HC138(unsigned char channel); void InitSystem(); void Delay(unsigned int ms); void Led(unsigned char who,status); //void Led(unsigned char dat); void Timer0Init();//nixie.c void DisplayBit(unsigned char pos,value); void DisplayTime(); void DisplayTemper(); void DisplayVolt(); void DisplayTime_p(); void DisplayTemper_p(); void DisplaySMG(); void OperateLed();//key.c void KeyScans();#endif

總結

以上是生活随笔為你收集整理的11届蓝桥杯单片机设计与开发决赛的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。