声明:1、我发布程序旨在希望大家蓝桥杯单片机比赛可以取得好成绩

           2、在看我程序之前希望大家先去B站观看完小蜜蜂老师的蓝桥杯单片机视频讲解

小蜜蜂视频链接:【小蜜蜂笔记】蓝桥杯大赛-单片机设计与开发基础技能与进阶强化教程_哔哩哔哩_bilibili

本程序资源包采用第十三届蓝桥杯资源包

博客包含第八届第十三届蓝桥杯单片机真题所有程序

main.c 

#include <reg52.h>
#include <ds1302.h>
#include <onewire.h>
sfr P4 = 0xC0;sbit L1 = P0^0;
sbit L2 = P0^1;
sbit L3 = P0^2;sbit R1 = P3^0;
sbit R2 = P3^1;
sbit R3 = P3^2;
sbit R4 = P3^3;sbit C1 = P3^4;
sbit C2 = P3^5;
sbit C3 = P4^2;
sbit C4 = P4^4;sbit Relay = P0^4;
sbit Buzzer = P0^6;//变量区
unsigned int count;//继电器5s
unsigned char count1;//0.1s
unsigned int count2;//LED5s
unsigned char state_5 = 0;//0.1s标志位
unsigned char state_4 = 0;//LED5s标志位
unsigned char state_3 = 0;//继电器标志位
unsigned char state_2 = 1;//时间控制
unsigned char mode = 1;//模式控制
unsigned char state_1 = 1;//界面控制
unsigned char number = 23;//参数
unsigned int temp;//温度
unsigned char Write_DS1302_Addr[3] = {0x80,0x82,0x84};
unsigned char Read_DS1302_Addr[3] = {0x81,0x83,0x85};
unsigned char Timer[3] = {0x50,0x59,0x22};//22:59:50
unsigned char SMG_Val[10] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
//锁存器的选择
void SelectHC573(unsigned char channel)
{switch(channel){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 Select_SMG(unsigned char pos,val)
{SelectHC573(7);P0 = 0xff;SelectHC573(6);P0 = 0x01 << pos;SelectHC573(7);P0 = val;
}
//数码管的选择(有点)
void Select_DotSMG(unsigned char pos,val)
{SelectHC573(7);P0 = 0xff;SelectHC573(6);P0 = 0x01 << pos;SelectHC573(7);P0 = val & 0x7f;
}
//关闭所有
void CloseAll()
{SelectHC573(6);P0 = 0xff;SelectHC573(7);P0 = 0xff;
}
//DS1302初始化
void Init_DS1302()
{unsigned char i;Write_Ds1302_Byte(0x8e,0x00);for(i = 0;i < 3;i ++){Write_Ds1302_Byte(Write_DS1302_Addr[i],Timer[i]);}Write_Ds1302_Byte(0x8e,0x80);
}
//读取DS1302时间
void Read_DS1302()
{unsigned char i;for(i = 0;i < 3;i ++){Timer[i] = Read_Ds1302_Byte(Read_DS1302_Addr[i]);}
}
//定时器0初始化
void Init_Timer0()
{TMOD = 0x01;TH0 = (65536 - 50000) / 256;TL0 = (65536 - 50000) % 256;EA = 1;ET0 = 1;
//  TR0 = 1;
}
//定时器0服务函数
void Service_T0() interrupt 1
{TH0 = (65536 - 50000) / 256;TL0 = (65536 - 50000) % 256;count ++;count2 ++;if(count == 100){state_3 = 0;count = 0;}if(count2 == 100){state_4 = 0;count2 = 0;}
}
//定时器1初始化
void Init_Timer1()
{TMOD = 0x01;TH1 = (65536 - 50000) / 256;TL1 = (65536 - 50000) % 256;EA = 1;ET1 = 1;
//  TR1 = 1;
}
//定时器1服务函数
void Service_T1() interrupt 3
{TH1 = (65536 - 50000) / 256;TL1 = (65536 - 50000) % 256;count1 ++;if(count1 == 2){state_5 = !state_5;count1 = 0;}
}
//延迟函数
void Delay(unsigned int t)
{while(t --);
}
//DS1302界面
void Display_DS1302()
{Select_SMG(0,0xc1);Delay(100);Select_SMG(1,SMG_Val[2]);Delay(100);if(state_2 == 1){Select_SMG(3,SMG_Val[Timer[2] / 16]);Delay(100);Select_SMG(4,SMG_Val[Timer[2] % 16]);Delay(100);Select_SMG(5,0xbf);Delay(100);Select_SMG(6,SMG_Val[Timer[1] / 16]);Delay(100);Select_SMG(7,SMG_Val[Timer[1] % 16]);Delay(100);}else if(state_2 == 2){Select_SMG(3,SMG_Val[Timer[1] / 16]);Delay(100);Select_SMG(4,SMG_Val[Timer[1] % 16]);Delay(100);Select_SMG(5,0xbf);Delay(100);Select_SMG(6,SMG_Val[Timer[0] / 16]);Delay(100);Select_SMG(7,SMG_Val[Timer[0] % 16]);Delay(100);}CloseAll();
}
//DS18B20界面//123
void Display_DS18B20()
{temp = DS18B20_Temp();Select_SMG(7,SMG_Val[temp % 10]);Delay(500);Select_DotSMG(6,SMG_Val[temp % 100 / 10]);Delay(500);Select_SMG(5,SMG_Val[temp / 100]);Delay(500);Select_SMG(1,SMG_Val[1]);Delay(500);Select_SMG(0,0xc1);Delay(500);CloseAll();
}
//参数界面
void Display_CS()
{Select_SMG(7,SMG_Val[number % 10]);Delay(100);Select_SMG(6,SMG_Val[number / 10]);Delay(100);Select_SMG(1,SMG_Val[3]);Delay(100);Select_SMG(0,0xc1);Delay(100);CloseAll();
}
//所有界面
void Display()
{switch(state_1){case 1 : Display_DS18B20(); break;case 2 : Display_DS1302(); break;case 3 : Display_CS(); break;}
}
void Control_mode();
void LED_Control();
//按键控制
void KEY_KBO()
{R4 = 0;R1 = R2 = R3 = 1; //S12C1 = C2 = C3 = C4 = 1;if(C2 == 0){Delay(200);if(C2 == 0){if(state_1 == 1){state_1 = 2;}else if(state_1 == 2){state_1 = 3;}else if(state_1 == 3){state_1 = 1;}}while(C2 == 0){Display();LED_Control();}}R3 = 0;R1 = R2 = R4 = 1; //S13C1 = C2 = C3 = C4 = 1;if(C2 == 0){Delay(200);if(C2 == 0){if(mode == 1){mode = 2;}else if(mode ==2){mode = 1;}}while(C2 == 0){Display();LED_Control();}}R4 = 0;R1 = R2 = R3 = 1; //S16C1 = C2 = C3 = C4 = 1;if(C1 == 0){Delay(200);if(C1 == 0){if(state_1 == 3){    number ++;if(number > 99){number = 10;}}}while(C1 == 0){Display();LED_Control();}}R3 = 0;R1 = R2 = R4 = 1; //S17C1 = C2 = C3 = C4 = 1;if(C1 == 0){Delay(200);if(C1 == 0){if(state_1 == 2){while(C1 == 0){state_2 = 2;Display();
//                  Control_mode();LED_Control();Read_DS1302();}state_2 = 1;}else if(state_1 == 3){number --;if(number < 10){number = 99;}}while(C1 == 0){Display();LED_Control();}}}
}
//控制模块
void Control_mode()
{if(mode == 1) //温度{if(temp > number * 10){SelectHC573(5);Relay = 1;Buzzer = 0;state_3 = 1;}else {SelectHC573(5);Relay = 0;Buzzer = 0;state_3 = 0;}}if(mode == 2) //时间{if(Timer[1] == 0x00 && Timer[0] == 0x00){SelectHC573(5);Relay = 1;Buzzer = 0;state_3 = 1;TR0 = 1;}else if(state_3 == 0){SelectHC573(5);Relay = 0;Buzzer = 0;TR0 = 0;}}
}
//LED
void LED_Control()
{SelectHC573(4);if(Timer[1] == 0x00 && Timer[0] == 0x00){state_4 = 1;TR0 = 1;}else if(state_4 == 0){TR0 = 0;}if(state_4 == 1){L1 = 0;}else if(state_4 == 0){L1 = 1;}if(mode == 1){L2 = 0;}else if(mode == 2){L2 = 1;}if(state_3 == 1){TR1 = 1;if(state_5 == 1){L3 = 0;}else if(state_5 == 0){L3 = 1;}}else if(state_3 == 0){TR1 = 0;}
}
//系统初始化
void InitSystem()
{SelectHC573(5);P0 = 0x00;SelectHC573(4);P0 = 0xff;
}
//主函数
void main()
{Init_Timer1();Init_Timer0();Init_DS1302();InitSystem();while(1){LED_Control();Control_mode();Read_DS1302();Display();KEY_KBO();}
}

DS1302.c

#include "ds1302.h"                                    //写字节
void Write_Ds1302(unsigned  char temp)
{unsigned char i;for (i=0;i<8;i++)        { SCK = 0;SDA = temp&0x01;temp>>=1; SCK=1;}
}   //向DS1302寄存器写入数据
void Write_Ds1302_Byte( unsigned char address,unsigned char dat )
{RST=0;    _nop_();SCK=0; _nop_();RST=1;     _nop_();  Write_Ds1302(address);    Write_Ds1302(dat);      RST=0;
}//从DS1302寄存器读出数据
unsigned char Read_Ds1302_Byte ( unsigned char address )
{unsigned char i,temp=0x00;RST=0; _nop_();SCK=0; _nop_();RST=1; _nop_();Write_Ds1302(address);for (i=0;i<8;i++)   {       SCK=0;temp>>=1; if(SDA)temp|=0x80; SCK=1;} RST=0;    _nop_();SCK=0; _nop_();SCK=1; _nop_();SDA=0; _nop_();SDA=1; _nop_();return (temp);
}

OneWire.c

#include "onewire.h"//单总线内部延时函数
void Delay_OneWire(unsigned int t)
{while(t--);
}//单总线写操作
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(50);DQ = 1;dat >>= 1;}Delay_OneWire(50);
}//单总线读操作
unsigned char Read_DS18B20(void)
{unsigned char i;unsigned char dat;for(i=0;i<8;i++){DQ = 0;dat >>= 1;DQ = 1;if(DQ){dat |= 0x80;}        Delay_OneWire(50);}return dat;
}//DS18B20初始化
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(120);DQ = 0;Delay_OneWire(800);DQ = 1;Delay_OneWire(100); initflag = DQ;     Delay_OneWire(50);return initflag;
}unsigned int DS18B20_Temp()
{unsigned char LSB,MSB;unsigned int temp;init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);Delay_OneWire(50);init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0xbe);LSB = Read_DS18B20();MSB = Read_DS18B20();temp = MSB << 8;temp = temp | LSB;temp = temp * 0.625;return temp;
}

DS1302.h

#ifndef __DS1302_H
#define __DS1302_H#include <reg52.h>
#include <intrins.h>sbit SCK = P1^7;
sbit SDA = P2^3;
sbit RST = P1^3; void Write_Ds1302(unsigned char temp);
void Write_Ds1302_Byte( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302_Byte( unsigned char address );#endif

OneWire.h

#ifndef __ONEWIRE_H
#define __ONEWIRE_H#include "reg52.h"sbit DQ = P1^4;  unsigned int DS18B20_Temp(); #endif

第十三届蓝桥杯单片机完整程序相关推荐

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

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

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

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

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

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

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

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

  5. 【蓝桥杯】第十三届蓝桥杯单片机第二次省赛 代码程序

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

  6. 第九届蓝桥杯单片机完整程序

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

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

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

  8. 2018第八届至2022年第十三届蓝桥杯单片机开放与设计省赛客观题及简解整理

    前言: 由于本人马上要参加第十四届蓝桥杯单片机设计与开发的省赛了,在对客观题复习两轮后,发现效率是比较低的,因此整理了2018至2022年的省赛客观题,将大概的考点划分三部分,这样可以更加系统的复习其 ...

  9. 2020第十一届至2022年第十三届蓝桥杯单片机开放与设计省赛第二批客观题及简解整理

    前言: 之前的2018第八届至2022年第十三届的省赛客观题,其中第十一届至第十三届又包含第二批类型,这里作为补充,两篇文章可互相参考. 2018第八届至2022年第十三届的省赛客观题[http:// ...

最新文章

  1. 周信东c语言实验二实验报告,周信东主编最新版C语言程序设计基础实验一实验报告.doc...
  2. 【赠书】如何构建企业级的推荐系统?这本书值得一看
  3. 产品分析:岛APP,青年文化拍了拍社交赛道
  4. mongoDB分页的两种方法
  5. HttpURLConnection总结
  6. JAVA实验报告九异常处理_JAVA实验报告_Java异常处理
  7. html 页面重复度高,哪些情况容易造成重复页面
  8. 在gitlab 中使用webhook 实现php 自动部署git 代码
  9. 为什么说机器学习不是人工智能?
  10. java excel 超链接_Java 编辑、删除Excel中的超链接
  11. flink java生成流式数据
  12. SQL Server 2008 Mirror
  13. 和baby的区别_姜涛状告白衣山猫?小伊伊有剧本?惟Baby整容?阿彩照骗?De劈腿?...
  14. C++笔记----运算符重载
  15. 简单的整人代码(你是猪,文章末附带文件)
  16. 如何显示Word 左侧目录
  17. mybatis入门1
  18. 【中亦安图】小机上运行Oracle需要注意的进程调度bug(1)
  19. H5获取手机型号,获取具体手机型号
  20. eclipse常用插件地址

热门文章

  1. 【opencv学习】opencv基础用法
  2. 往mysql批量插入datetime
  3. java layout组件居中_Android 布局中 如何使控件居中
  4. oracle 定时任务删除数据
  5. 大学计算机基础是什么时候学,大学计算机基础教学大纲(72学时版).docx
  6. beanshell断言_jmeter之beanshell断言实例
  7. 阿里巴巴P8自爆:Java八大核心思维导图知识梳理
  8. 【身份证识别】形态学二代身份证号码识别系统【含GUI源码 948期】
  9. 传PPG首席执行官李亮携款超过2千万美元潜逃
  10. 大数据可视化之气象数据可视化(雷达、云图、落区、等值面)