蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)

蓝桥杯单片机省赛将近,小伙伴们都在抓紧时间准备做省赛真题,下面是我为大家分享一下模拟题。
蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)
文章图片


蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)
文章图片
蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)
文章图片
蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)
文章图片
蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)
文章图片
蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)
文章图片

【蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)】main.c程序

#include "stc15f2k60s2.h" #include "iic.h" #define uchar unsigned char #define uint unsigned int uchar code tab[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,//0~9数字 0X40,0X79,0X24,0X30,0X19,0X12,0X02,0X78,0X00,0X10,//0~9数字带小数点 0XBF,0XFF,0x8e,0xc1,0xc8,0xbf}; uint yemian,LED_buff,zhouqi, dianya=0,AD=0; uchar yi,er,san,si,wu,liu,qi,ba; uchar t=0,tongdao=0; uint count,count_f; uint pinlv,pinlv_s,AD_s; void led_dis(); void init_timer0(); void delayms(int ms); //延时函数 void Allinit(); //初始化函数 void keyscan(); //独立按键函数 void display1(uchar yi,uchar er); //第一、二段数码管函数 void display2(uchar san,uchar si); //第三、四段数码管函数 void display3(uchar wu,uchar liu); //第五、六段数码管函数 void display4(uchar qi,uchar ba); //第七、八段数码管函数void main() { Allinit(); init_timer0(); pinlv_s=EERPOM_read(0x00); delayms(5); //读取频率采集的电压 AD_s=EERPOM_read(0X01); delayms(5); //读取rb2采集的电压 while(1) { if(P30==0) { delayms(5); t++; if(t==1)//短按频率采集 { EERPOM_write(0x00,pinlv); delayms(5); } if(t==50)//长按是S7按键led点亮,或者熄灭 { LED_buff=~LED_buff; t=0; } } dianya=AD_read(0X03)*1.91; AD=AD_read(0x01)*1.91; if(yemian==0)//频率显示页面 {if(pinlv>=10000){yi=22; er=21; san=21; si=pinlv/10000; wu=pinlv%10000/1000; liu=pinlv%1000/100; qi=pinlv%100/10; ba=pinlv%10; }else if(pinlv>=1000){yi=22; er=21; san=21; si=21; wu=pinlv/1000; liu=pinlv%1000/100; qi=pinlv%100/10; ba=pinlv%10; } else if(pinlv>=100){yi=22; er=21; san=21; si=21; wu=21; liu=pinlv/100; qi=pinlv%100/10; ba=pinlv%10; } else if(pinlv>=10){yi=22; er=21; san=21; si=21; wu=21; liu=21; qi=pinlv%100/10; ba=pinlv%10; } }else if(yemian==1)//频率周期显示页面 {if(zhouqi>=10000){yi=23; er=21; san=21; si=zhouqi/10000; wu=zhouqi%10000/1000; liu=zhouqi%1000/100; qi=zhouqi%100/10; ba=zhouqi%10; }else if(zhouqi>=1000){yi=23; er=21; san=21; si=21; wu=zhouqi/1000; liu=zhouqi%1000/100; qi=zhouqi%100/10; ba=zhouqi%10; } else if(zhouqi>=100){yi=23; er=21; san=21; si=21; wu=21; liu=zhouqi/100; qi=zhouqi%100/10; ba=zhouqi%10; } else if(zhouqi>=10){yi=23; er=21; san=21; si=21; wu=21; liu=21; qi=zhouqi%100/10; ba=zhouqi%10; } } else if(yemian==2)//电压显示页面 {if(tongdao==0)//reb2电压显示 { yi=23; er=25; san=1; si=21; wu=21; liu=dianya/100+10; qi=dianya%100/10; ba=dianya%10; } else if(tongdao==1)//光敏电阻显示 { yi=23; er=25; san=3; si=21; wu=21; liu=AD/100+10; qi=AD%100/10; ba=AD%10; } }led_dis(); keyscan(); display1(yi,er); display2(san,si); display3(wu,liu); display4(qi,ba); } }void led_dis()//led灯亮灭状态 { uchar led1 ,led2; if(pinlv>=pinlv_s){P2=(P2&0X1F)|0X80; P0=0XFd|LED_buff; led1=0xfd; } if(pinlv=AD_s){P2=(P2&0X1F)|0X80; P0=(0XFE&led1)|LED_buff; led2=P0; } if(AD0; i--) for(j=845; j>0; j--); } void Allinit()//初始化函数 { P2=0X80; P0=0XFF; P2=0XA0; P0=0X00; P2=0XC0; P0=0XFF; P2=0XFF; P0=0XFF; }

iic.c程序
#include "stc15f2k60s2.h" #include "intrins.h"#define somenop {_nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); }#define SlaveAddrW 0xA0 #define SlaveAddrR 0xA1//总线引脚定义 sbit SDA = P2^1; /* 数据线 */ sbit SCL = P2^0; /* 时钟线 *///总线启动条件 void IIC_Start(void) { SDA = 1; SCL = 1; somenop; SDA = 0; somenop; SCL = 0; }//总线停止条件 void IIC_Stop(void) { SDA = 0; SCL = 1; somenop; SDA = 1; }bit IIC_WaitAck(void) { SDA = 1; somenop; SCL = 1; somenop; if(SDA) { SCL = 0; IIC_Stop(); return 0; } else { SCL = 0; return 1; } }//通过I2C总线发送数据 void IIC_SendByte(unsigned char byt) { unsigned char i; for(i=0; i<8; i++) { if(byt&0x80) { SDA = 1; } else { SDA = 0; } somenop; SCL = 1; byt <<= 1; somenop; SCL = 0; } }//从I2C总线上接收数据 unsigned char IIC_RecByte(void) { unsigned char da; unsigned char i; for(i=0; i<8; i++) { SCL = 1; somenop; da <<= 1; if(SDA) da |= 0x01; SCL = 0; somenop; } return da; } unsigned char AD_read(unsigned char dat) { unsigned char temp; IIC_Start(); IIC_SendByte(0x90); IIC_WaitAck(); IIC_SendByte(dat); IIC_WaitAck(); IIC_Stop(); IIC_Start(); IIC_SendByte(0x91); IIC_WaitAck(); temp=IIC_RecByte(); IIC_WaitAck(); IIC_Stop(); return temp; } unsigned int EERPOM_read(unsigned int add) { unsigned char temp; IIC_Start(); IIC_SendByte(0xA0); IIC_WaitAck(); IIC_SendByte(add); IIC_WaitAck(); IIC_Stop(); IIC_Start(); IIC_SendByte(0xA1); IIC_WaitAck(); temp=IIC_RecByte(); return temp; } void EERPOM_write(unsigned int dat ,unsigned int add) { IIC_Start(); IIC_SendByte(0xA0); IIC_WaitAck(); IIC_SendByte(dat); IIC_WaitAck(); IIC_SendByte(add); IIC_WaitAck(); IIC_Stop(); }

iic.h程序
#ifndef _IIC_H #define _IIC_Hvoid IIC_Start(void); void IIC_Stop(void); bit IIC_WaitAck(void); void IIC_SendByte(unsigned char byt); unsigned char IIC_RecByte(void); unsigned char AD_read(unsigned char dat); unsigned int EERPOM_read(unsigned int add); void EERPOM_write(unsigned int dat ,unsigned int add); #endif

这套题整体来说还是比较简单的,

    推荐阅读