第十三届蓝桥杯单片机第二次省赛

  • 题目
  • hex文件
  • 代码
  • 工程文件
  • B站视频
  • 更多资料

题目

历届的省赛和国赛的题目我已经在前面的文章(点击查看)里给大家分享了(网盘资源),需要的话,直接去下载,我在这里就不再赘述了。

hex文件

读者下载这个文件然后用烧录软件直接烧入单片机就可以用了!

有问题直接找我哟。

链接: https://pan.baidu.com/s/1N2z8OM4pQb6lUY_xSEWUhg?pwd=s6nx
提取码: s6nx

代码

main.c

#include "stc15.h"
#include "iic.h"#define u8 unsigned char
#define u16 unsigned int//          12:U        13:P        14:L         15:A
u8 code Tab[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xbf,0xff,0xc1,0x8c,0xc3,0x88};
u8 smg_cnt=0;
u8 disbuff[9];u8     key_buf=0;u16 dat_rb2=0;u8 rb2_s=45;
u8 rb2_x=5;u8 rb2_s_temp=45;
u8 rb2_x_temp=5;
u8 mode=1;bit d_flag=0;//0:未启动 1:连续测量  bit rb2_flag=0;//0:上限     1:下限sbit TX=P1^0;
sbit RX=P1^1;
u8 distance=0;
u16 wave_tt=0;
bit wave_flag=1;
u8 led_state=0xff;bit L8_flag=0;
u16 L8_tt=0;//************************ 超声波模块 ********************************************void Timer0Init(void)     //12微秒@12.000MHz
{AUXR &= 0x7F;     //定时器时钟12T模式TMOD &= 0xF0;      //设置定时器模式TL0 = 0xF4;       //设置定时初值TH0 = 0xFF;        //设置定时初值TF0 = 0;       //清除TF0标志TR0 = 0;      //定时器0开始计时
}void Wave_Distance()
{u8 num=10;TX=0;TL0 = 0xF4;      //设置定时初值TH0 = 0xFF;        //设置定时初值TR0=1;while(num--){while(TF0==0);TF0=0;TX^=1;}TR0=0;TH0=0;TL0=0;TR0=1;while(RX && !TF0);TR0=0;if(TF0){TF0=0;distance=99;}else{distance=((TH0<<8)+TL0)*0.017;    if(distance>=99)distance=99;}}
//************************ 初始化 程序 ********************************************
void Delay5ms()     //@12.000MHz
{unsigned char i, j;i = 59;j = 90;do{while (--j);} while (--i);
}
void Init_System()
{P2&=0x1f;P0=0xff;P2|=0x80;P2&=0x1f;P0=0x00;P2|=0xa0;P2&=0x1f;P0=0xff;P2|=0xc0;P2&=0x1f;P0=0xff;P2|=0xe0;P2&=0x1f;}
//************************ 数码管 程序 ********************************************
void Timer2Init(void)       //1毫秒@12.000MHz
{AUXR |= 0x04;     //定时器时钟1T模式T2L = 0x20;     //设置定时初值T2H = 0xD1;        //设置定时初值AUXR |= 0x10;      //定时器2开始计时IE2|=0x04;EA=1;
}
void Sevice_Timer2() interrupt 12
{P2&=0x1f;P0=0xff;P2|=0xe0;P2&=0x1f;P0=1<<smg_cnt;P2|=0xc0;P2&=0x1f;if(mode==1&&smg_cnt==5)P0=Tab[disbuff[smg_cnt+1]]&0x7f;else  if(mode==3&&smg_cnt==6)P0=Tab[disbuff[smg_cnt+1]]&0x7f;else  if(mode==3&&smg_cnt==3)P0=Tab[disbuff[smg_cnt+1]]&0x7f;elseP0=Tab[disbuff[smg_cnt+1]];P2|=0xe0;P2&=0x1f;if(++smg_cnt>=8)smg_cnt=0;if(++wave_tt>=200)
{wave_tt=0;wave_flag=1;
}if(d_flag){if(++L8_tt>=100){L8_tt=0;L8_flag=!L8_flag;}}else{L8_tt=0;L8_flag=0;}}void Show_SMG_11()
{disbuff[1]=11;disbuff[2]=11;disbuff[3]=11;disbuff[4]=11;disbuff[5]=11;disbuff[6]=11;disbuff[7]=11;disbuff[8]=11;
}void Show_SMG_U()
{disbuff[1]=12;disbuff[2]=11;disbuff[3]=11;disbuff[4]=11;disbuff[5]=11;disbuff[6]=dat_rb2/100%10;disbuff[7]=dat_rb2/10%10;disbuff[8]=dat_rb2%10;
}
void Show_SMG_P()
{disbuff[1]=13;disbuff[2]=11;disbuff[3]=11;disbuff[4]=rb2_s/10%10;disbuff[5]=rb2_s%10;disbuff[6]=11;disbuff[7]=rb2_x/10%10;disbuff[8]=rb2_x%10;
}
void Show_SMG_L()
{disbuff[1]=14;disbuff[2]=11;disbuff[3]=11;disbuff[4]=11;disbuff[5]=11;if(d_flag){if(distance>=100)disbuff[6]=distance/100%10;elsedisbuff[6]=11;if(distance>=10)disbuff[7]=distance/10%10;else      disbuff[7]=11;disbuff[8]=distance%10;}else{disbuff[6]=15;disbuff[7]=15;disbuff[8]=15;}
}
void Show_SMG()
{if(mode==1)Show_SMG_U();else  if(mode==3)Show_SMG_P();else  if(mode==2)Show_SMG_L();
}//************************ 按键 程序 ********************************************
void Scan_Key()
{u8 key_temp;key_temp=P3&0x0f;if(key_temp!=0x0f&&!key_buf){Delay5ms();key_temp=P3&0x0f;if(key_temp!=0x0f&&!key_buf){key_buf=key_temp;} }else if(key_temp==0x0f&&key_buf){Delay5ms();key_temp=P3&0x0f;if(key_temp==0x0f&&key_buf){switch(key_buf){case 0x07:if(mode<=3){if(++mode>=4){mode=1;rb2_s_temp=rb2_s;rb2_x_temp=rb2_x;}if(mode==3){rb2_flag=0;}}break;//S4case 0x0b:rb2_flag=!rb2_flag;break;//S5case 0x0d:if(mode==3){if(rb2_flag==0){rb2_s+=5;if(rb2_s>50){rb2_s=5;}}else{rb2_x+=5;if(rb2_x>=55){rb2_x=5;}}}break;//S6case 0x0e:if(mode==3){if(rb2_flag==0){rb2_s-=5;if(rb2_s==0){rb2_s=50;}}else{rb2_x-=5;if(rb2_x==0){rb2_x=50;}}}break;//S7}key_buf=0;}}}
//************************ 主函数 程序 ********************************************
void main()
{Init_System();Timer0Init();Timer2Init();while(1){dat_rb2=Read_PCF8591(3)/255.0*500;dat_rb2=Read_PCF8591(3)/255.0*500;if(wave_flag){wave_flag=0;Wave_Distance();}if((dat_rb2<(rb2_s*10))&&(dat_rb2>(rb2_x*10))){d_flag=1;}elsed_flag=0;if(d_flag){if(distance<=20){Write_PCF8591(51);}else   if(distance<=20){Write_PCF8591((distance/15.0-1/3.0)/5.0*255);}elseWrite_PCF8591(255);Scan_Key();Show_SMG();}led_state=0xff;if(mode==1)led_state&=0xfe;if(mode==2)led_state&=0xfd;if(mode==3)led_state&=0xfb; if(L8_flag)led_state&=0x7f; P0=led_state;P2|=0x80;P0=led_state;P2&=0x1f;}
}

iic.h

#ifndef _IIC_H
#define _IIC_H#include "stc15.h"
#include "intrins.h"sbit SDA = P2^1;
sbit SCL = P2^0;void 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_PCF8591(unsigned char channel);
void Write_PCF8591(unsigned char dat);
#endif

ii.c

#include "iic.h"#define DELAY_TIME 5//I2C总线内部延时函数
void IIC_Delay(unsigned char i)
{do{_nop_();}while(i--);
}//I2C总线启动信号
void IIC_Start(void)
{SDA = 1;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 0;IIC_Delay(DELAY_TIME);SCL = 0;
}//I2C总线停止信号
void IIC_Stop(void)
{SDA = 0;SCL = 1;IIC_Delay(DELAY_TIME);SDA = 1;IIC_Delay(DELAY_TIME);
}//发送应答或非应答信号
void IIC_SendAck(bit ackbit)
{SCL = 0;SDA = ackbit;                    IIC_Delay(DELAY_TIME);SCL = 1;IIC_Delay(DELAY_TIME);SCL = 0; SDA = 1;IIC_Delay(DELAY_TIME);
}//等待应答
bit IIC_WaitAck(void)
{bit ackbit;SCL  = 1;IIC_Delay(DELAY_TIME);ackbit = SDA;SCL = 0;IIC_Delay(DELAY_TIME);return ackbit;
}//I2C总线发送一个字节数据
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总线接收一个字节数据
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 char Read_PCF8591(unsigned char channel)
{unsigned char temp;IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(0x40|channel);IIC_WaitAck();IIC_Start();IIC_SendByte(0x91);IIC_WaitAck();temp=IIC_RecByte();IIC_SendAck(1);IIC_Stop();return temp;
}
void Write_PCF8591(unsigned char dat)
{IIC_Start();IIC_SendByte(0x90);IIC_WaitAck();IIC_SendByte(0x40);IIC_WaitAck();IIC_SendByte(dat);IIC_WaitAck();IIC_Stop();}

工程文件

链接: https://pan.baidu.com/s/1jRhMNoBHzTNTYV4sMyU6-A?pwd=ac8w
提取码: ac8w

B站视频

我在B站发布了自己完成代码的过程,想要了解的朋友可以点击呀,第十三届蓝桥杯单片机第一次省赛。

更多资料

需要更多蓝桥杯资料的小可爱,可以关注公众号【玛德花】,回复 蓝桥杯 即可,也随时欢迎需要交流的小伙伴一起讨论呀。

【蓝桥杯】第十三届蓝桥杯单片机第二次省赛 代码程序相关推荐

  1. 蓝桥杯 第十三届蓝桥杯省赛C++组真题 修剪灌木 Python

    题目 爱丽丝要完成一项修剪灌木的工作. 有 NN 棵灌木整齐的从左到右排成一排. 爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 00 厘米. 爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪 ...

  2. 【蓝桥系列】——十三届蓝桥杯PythonB组第五题E题蜂巢(AC代码)

    大家好,我是普通小明,初入学习博客,一起加油! 首先,感谢 小蓝刷题 对我的鼓励,我也希望加入学习算法这个大家庭. 第一篇文章,有些不完美,还请多多指教. 目录 (好像我并不会用锚点T-T) 省赛心得 ...

  3. 第十三届 蓝桥杯 单片机设计与开发项目 省赛

    目录 题目分析 代码分析 代码链接 题目分析 就在前不久第十三届蓝桥杯比赛结束,我就把单片机的题目拿过来看了看,下面是我对题目的分析和本次题目的代码.项目工程在文章的末尾,欢迎大家参考和指正. 在看到 ...

  4. 第十三届蓝桥杯单片机完整程序

    声明:1.我发布程序旨在希望大家蓝桥杯单片机比赛可以取得好成绩            2.在看我程序之前希望大家先去B站观看完小蜜蜂老师的蓝桥杯单片机视频讲解 小蜜蜂视频链接:[小蜜蜂笔记]蓝桥杯大赛 ...

  5. 十三届蓝桥杯单片机组省赛真题程序解析

    第一次参加蓝桥杯,线上比赛,记录一下 比赛刚开始了十分钟才做上客观题,做上了之后才发现看一次题警告一次,当时就蚌埠住了,随便做了做就交了,手册也没怎么查(查一下直接给了3次黄牌,就没敢查了)其实老师1 ...

  6. 【第十三届蓝桥杯单片机省赛模拟冲刺01】

    第十三届蓝桥杯单片机省赛模拟冲刺 赛前一两周一定要多练习,把之前写过的程序在好好看看,把每个模块的代码都多敲几遍,把常考的每个模块部分都吃透,如果理解不了的趁时间还比较充足该背的背牢.同时在准备编程题 ...

  7. 【蓝桥杯】第十三届蓝桥杯单片机国赛 代码程序

    第十三届蓝桥杯单片机国赛 程序 题目 hex文件 代码 工程文件 B站视频 更多资料 题目 历届的省赛和国赛的题目我已经在前面的文章(点击查看)里给大家分享了(网盘资源),需要的话,直接去下载,我在这 ...

  8. 第十三届“蓝桥杯”单片机省赛——程序设计题

    第十三届"蓝桥杯"单片机省赛--程序设计题 在比赛时候编写,代码仅供参考 如有不足,多多指教 1.题目 2.代码 main.c程序 #include "reg52.h&q ...

  9. 关于第十三届蓝桥杯大赛校内选拔赛的通知

    关于第十三届蓝桥杯大赛校内选拔赛的通知 注:使用Python语言参加校赛并取得参加省赛资格的同学,跟我联系一下,我可以辅导你们参加蓝桥杯的省赛. 下面是我在蓝桥云课的讲课视频,我可以给你们再讲一遍. ...

最新文章

  1. python 安卓模拟点击_python模拟点击在ios中实现的实例讲解
  2. excel mysql日报_Excel日报自动化
  3. 使用git将本地项目上传到github
  4. Codeforces 1284E New Year and Castle Building (计算几何)
  5. 是什么的简称_被简称为“中大”的大学,为什么没有别的大学和它争名字?
  6. mysql json invalid json text_MySQL 5.7新增加的json数据类型
  7. acrgis api for javaScript需要对Dojo了解多少?
  8. VMware扩展Tanzu产品系列与合作关系
  9. 两大微服务框架dubbo和spring cloud对比
  10. ubuntu sftp服务器搭建
  11. 松下弧焊机器人 调电压_松下焊接机器人操作规程
  12. 计算机网络从使用对象上划分为,计算机网络练习题卷1-2章.doc
  13. 【小技巧】苹果手机获取UDID的方法【两种UID的获取方法,非常实用】
  14. 小学阶段计算机编程启蒙闲谈
  15. 字符间距和文字效果(转)
  16. android字体大小根据分辨率自动调整
  17. dubbo的常用容错机制
  18. 再见,我亲手创办的公司
  19. HTML+CSS抗疫期末大作业:抗疫网站设计——新冠抗疫(4页) 学生DW网页设计作业成品 web课程设计网页规划与设计...
  20. matlab学习矩阵1

热门文章

  1. 拆书帮第14期训练营——作业六:第一周复盘
  2. C++之中的友元函数的作用
  3. Sonarqube各指标的定义及计算方法
  4. [游戏与人生]推荐几款老单机游戏
  5. 雪肌:中药美白方大揭秘
  6. C++期末考试复习资料三
  7. SMT32H7系列DMA和DMAMUX的一点理解
  8. ipython notebook_ipython notebook使用教程
  9. 墨画子卿第一章第2节:是仇,是恩
  10. 中国改革开放30年创新人物--戴晔