蓝桥杯单片机省赛将近,小伙伴们都在抓紧时间准备做省赛真题,下面是我为大家分享一下模拟题。
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
【蓝桥杯单片机真题|第十三届蓝桥杯单片机省赛模拟题(客观题程序题)】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
这套题整体来说还是比较简单的,
推荐阅读
- 蓝桥杯单片机|【蓝桥杯单片机的备赛旅行日记系列】之省赛初赛代码免费下载
- 13届蓝桥杯夺奖冲刺营|蓝桥杯省赛夺奖冲刺营散列表篇
- 13届蓝桥杯夺奖冲刺营|蓝桥杯省赛夺奖冲刺营贪心算法
- 蓝桥杯单片机|蓝桥杯单片机 省赛 第13届模拟题
- 13届蓝桥杯夺奖冲刺营|蓝桥杯省赛夺奖冲刺营链表篇
- C语言|【c语言strcpy、strcat、strlen函数实现】
- 蓝桥杯学习|【第十三届蓝桥杯单片机省赛模拟冲刺02】
- 机器学习|机器学习—KNN算法
- 搜索专题|搜索中的判重(以BFS为例)