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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

蓝桥杯单片机第十届省赛

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

如果有用請(qǐng)點(diǎn)贊,還會(huì)繼續(xù)更新的

題目:



好久沒有更新了,今天又寫了一個(gè)第十屆的,感覺這次就是555的頻率計(jì)數(shù)時(shí)那個(gè)定時(shí)器的使用有點(diǎn)小注意事項(xiàng),要用定時(shí)器0來計(jì)數(shù),定時(shí)器1來計(jì)時(shí),同時(shí)定時(shí)器1要計(jì)數(shù)555和模擬電壓,話不多說,直接上源代碼
main.c

#include"reg52.h" #include"intrins.h" #include"iic.h" void SMG(int wei,int dat); sfr AUXR=0x8e; sbit S4=P3^3;int K4=0; //mode sbit S5=P3^2;int K5=0; //choose_V sbit S6=P3^1;int K6=1; //led sbit S7=P3^0;int K7=1; //smg unsigned int v_temp; char code xianshi[15]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf,0x7F,0xC1,0x8e}; void get_v() {v_temp=read_v();v_temp=v_temp*1.96+0.5;}void choose_573(int n) {switch(n){case(0):P2=(P2&0x1f)|0x00;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 init_system() {choose_573(4);P0=0xff;choose_573(5);P0=0x00;choose_573(0);P0=0xff; } //---------------------------- 中斷 void Timer0Init(void) //100微秒@11.0592MHz {AUXR |= 0x80; TMOD = 0x04; TL0 = 0xff; TH0 = 0xff; TF0 = 0; TR0 = 1; ET0=1;EA=1;} int five_f; void Timer1_server() interrupt 1 {five_f++; }void Timer1Init(void) //5毫秒@11.0592MHz {AUXR |= 0x40; //定時(shí)器時(shí)鐘1T模式TMOD &= 0x0F; //設(shè)置定時(shí)器模式TL1 = 0x00; //設(shè)置定時(shí)初始值TH1 = 0x28; //設(shè)置定時(shí)初始值TF1 = 0; //清除TF1標(biāo)志TR1 = 1; //定時(shí)器1開始計(jì)時(shí)ET1=1;EA=1; } int Timer0_n=0; int Timer0_m=0; int dat_of_555; void Timer0_server() interrupt 3 {Timer0_n++;Timer0_m++;if(Timer0_n>=100){Timer0_n=0;get_v();}if(Timer0_m>=200){dat_of_555=five_f;five_f=0;Timer0_m=0; } }//---------------------------- //----------------------------按鍵 void Delay5ms() //@11.0592MHz {unsigned char i, j;i = 54;j = 199;do{while (--j);} while (--i); } int x; void key_board() {if(S4==0){Delay5ms();if(S4==0){K4++;if(K4==2){K4=0;}}while(!S4);}if(S5==0){Delay5ms();if(S5==0){K5++;if(K5==2){K5=0;v_temp=200;}}while(!S5);}if(S6==0){Delay5ms();if(S6==0){K6++;if(K6==2){K6=0;choose_573(4);P0=0xff;choose_573(0);P0=0xff;}}while(!S6);}if(S7==0){Delay5ms();if(S7==0){K7++;if(K7==2){K7=0;for(x=1;x<9;x++){SMG(x,10);}}}while(!S7);} } //---------------------------- //----------------------------數(shù)碼管 void Delay300us() //@11.0592MHz {unsigned char i, j;_nop_();_nop_();i = 4;j = 54;do{while (--j);} while (--i); } void SMG(int wei,int dat) {choose_573(6);P0=0x80>>(wei-1);choose_573(7);P0=xianshi[dat];choose_573(0);P0=0xff; } void smg_display() {if(K4==0&&K5==0&&K7==1){SMG(1,0);Delay300us();SMG(2,0);Delay300us();SMG(3,2);Delay300us();SMG(3,12);Delay300us();SMG(4,10);Delay300us();SMG(5,10);Delay300us();SMG(6,10);Delay300us();SMG(7,10);Delay300us();SMG(8,13);Delay300us(); }if(K4==0&&K5==1&&K7==1){SMG(1,v_temp%10);Delay300us();SMG(2,(v_temp%100)/10);Delay300us();SMG(3,v_temp/100);Delay300us();SMG(3,12);Delay300us();SMG(4,10);Delay300us();SMG(5,10);Delay300us();SMG(6,10);Delay300us();SMG(7,10);Delay300us();SMG(8,13);Delay300us(); }if(K4==1&&K7==1){SMG(1,dat_of_555%10);Delay300us();if(dat_of_555>=10){SMG(2,(dat_of_555%100)/10);}else {SMG(2,10);}Delay300us();if(dat_of_555>=100){SMG(3,(dat_of_555%1000)/100);}else{SMG(3,10);}Delay300us(); if(dat_of_555>1000){SMG(4,(dat_of_555%10000)/1000);}else{SMG(4,10);}Delay300us();if(dat_of_555>10000){SMG(5,(dat_of_555%100000)/10000);}else{SMG(5,10);}Delay300us();if(dat_of_555>100000){SMG(6,(dat_of_555%1000000)/100000);}else{SMG(6,10);}Delay300us();SMG(7,10);Delay300us();SMG(8,14);Delay300us();} } //---------------------------- //----------------------------led工作 void led_work() {if(K6==1&&K4==0){if(v_temp<150){choose_573(4);P0=0xfe;choose_573(0);P0=0xff;}if(v_temp<350&&v_temp>=250){choose_573(4);P0=0xfe;choose_573(0);P0=0xff;}if(v_temp>=150&&v_temp<250){choose_573(4);P0=0xfa;choose_573(0);P0=0xff;}if(v_temp>=350){choose_573(4);P0=0xfa;choose_573(0);P0=0xff;}}if(K6==1&&K4==1){if(dat_of_555<1000){choose_573(4);P0=0xfd;choose_573(0);P0=0xff;}if(dat_of_555>=1000&&dat_of_555<5000){choose_573(4);P0=0xf5;choose_573(0);P0=0xff;}if(dat_of_555>=5000&&dat_of_555<10000){choose_573(4);P0=0xfd;choose_573(0);P0=0xff; }if(dat_of_555>=10000){choose_573(4);P0=0xf5;choose_573(0);P0=0xff; }} } //---------------------------- void main() {init_system();Timer0Init();Timer1Init();while(1){key_board();smg_display();led_work();} }

iic.c

/*程序說明: IIC總線驅(qū)動(dòng)程序軟件環(huán)境: Keil uVision 4.10 硬件環(huán)境: CT107單片機(jī)綜合實(shí)訓(xùn)平臺(tái) 8051,12MHz日 期: 2011-8-9 */#include "reg52.h" #include "intrins.h"#define DELAY_TIME 5#define SlaveAddrW 0xA0 #define SlaveAddrR 0xA1//總線引腳定義 sbit SDA = P2^1; /* 數(shù)據(jù)線 */ sbit SCL = P2^0; /* 時(shí)鐘線 */void IIC_Delay(unsigned char i) {do{_nop_();}while(i--); } //總線啟動(dòng)條件 void IIC_Start(void) {SDA = 1;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 0;IIC_Delay(DELAY_TIME);SCL = 0; }//總線停止條件 void IIC_Stop(void) {SDA = 0;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 1;IIC_Delay(DELAY_TIME); }//發(fā)送應(yīng)答 void IIC_SendAck(bit ackbit) {SCL = 0;SDA = ackbit; // 0:應(yīng)答,1:非應(yīng)答IIC_Delay(DELAY_TIME);SCL = 1;IIC_Delay(DELAY_TIME);SCL = 0; SDA = 1;IIC_Delay(DELAY_TIME); }//等待應(yīng)答 bit IIC_WaitAck(void) {bit ackbit;SCL = 1;IIC_Delay(DELAY_TIME);ackbit = SDA;SCL = 0;IIC_Delay(DELAY_TIME);return ackbit; }//通過I2C總線發(fā)送數(shù)據(jù) void IIC_SendByte(unsigned char byt) {unsigned char i;for(i=0; i<8; i++){SCL = 0;IIC_Delay(DELAY_TIME);if(byt & 0x80) SDA = 1;else SDA = 0;IIC_Delay(DELAY_TIME);SCL = 1;byt <<= 1;IIC_Delay(DELAY_TIME);}SCL = 0; }//從I2C總線上接收數(shù)據(jù) unsigned char IIC_RecByte(void) {unsigned char i, da;for(i=0; i<8; i++){ SCL = 1;IIC_Delay(DELAY_TIME);da <<= 1;if(SDA) da |= 1;SCL = 0;IIC_Delay(DELAY_TIME);}return da; } unsigned int read_v() {unsigned int temp;IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(0x03);IIC_WaitAck();IIC_Stop();IIC_Start();IIC_SendByte(0x91);IIC_WaitAck();temp=IIC_RecByte();IIC_SendAck(1);IIC_WaitAck();IIC_Stop();return temp; }

iic.h

#ifndef _IIC_H #define _IIC_Hvoid IIC_Start(void); void IIC_Stop(void); bit IIC_WaitAck(void); void IIC_SendAck(bit ackbit); void IIC_SendByte(unsigned char byt); unsigned char IIC_RecByte(void); unsigned char read_v(); #endif

**

碼字不容易,點(diǎn)個(gè)贊再走!!!!

**

總結(jié)

以上是生活随笔為你收集整理的蓝桥杯单片机第十届省赛的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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