答案仅供参考,有错误欢迎指正,非常感谢!!!

文件较多,代码较长,感谢查看!!!

目录

main.h

main.c

Init.h

Init.c

SMG.h

SMG.c

DSQ.h

DSQ.c

YanShi.h

YanShi.c

JZKey.h

JZKey.c

ds1302.h

ds1302.c

onewire.h

onewire.c

main.h

#ifndef __MAIN_H_
#define __MAIN_H_#define uchar unsigned char
#define uint unsigned int#include <STC15F2K60S2.H>#include "Init.h"
#include "SMG.h"
#include "DSQ.h"
#include "YanShi.h"
#include "JZKey.h"
#include "ds1302.h"
#include "onewire.h"unsigned char JZKey_GetKeynum();
void JieMian_Show();
void LED_Show();#endif

main.c

#include "main.h"uchar flag0=0;
uchar jie_mian=0;
uchar Key_num=0;
uchar mo_shi=0;
uchar shi_jian_show_flag=0;
uchar can_shu=23;
float wen_du;
uint L1_time=0;
uchar L1_time_flag=0;
uchar JDQ_flag=0;
uint L3_time=0;
uchar flag=2;
uint wen_du_temp=0;
uchar flag1=1;unsigned char JZKey_GetKeynum(){unsigned char key_num=0;if(P30==0){P30=0;P34=1;P35=1;P42=1;P44=1;if(P34==0){Delay10ms();if(P34==0){key_num=19;}while(P34==0);}else if(P35==0){Delay10ms();if(P35==0){key_num=15;}while(P35==0);}else if(P42==0){Delay10ms();if(P42==0){key_num=11;}while(P42==0);}else if(P44==0){Delay10ms();if(P44==0){key_num=7;}while(P44==0);}}else if(P31==0){P31=0;P34=1;P35=1;P42=1;P44=1;if(P34==0){Delay10ms();if(P34==0){key_num=18;}while(P34==0);}else if(P35==0){Delay10ms();if(P35==0){key_num=14;}while(P35==0);}else if(P42==0){Delay10ms();if(P42==0){key_num=10;}while(P42==0);}else if(P44==0){Delay10ms();if(P44==0){key_num=6;}while(P44==0);}}else if(P32==0){P32=0;P34=1;P35=1;P42=1;P44=1;if(P34==0){        Delay10ms();if(P34==0){key_num=17;}if(jie_mian==2||jie_mian==0){while(P34==0);}}else if(P35==0){Delay10ms();if(P35==0){key_num=13;}   while(P35==0);}   else if(P42==0){Delay10ms();if(P42==0){key_num=9;}while(P42==0); }else if(P44==0){Delay10ms();if(P44==0){key_num=5;}while(P44==0);}     }else if(P33==0){P33=0;P34=1;P35=1;P42=1;P44=1;if(P34==0){Delay10ms();if(P34==0){key_num=16;}while(P34==0);}else if(P35==0){Delay10ms();if(P35==0){key_num=12;}while(P35==0);}else if(P42==0){Delay10ms();if(P42==0){key_num=8;}while(P42==0);}else if(P44==0){Delay10ms();if(P44==0){key_num=4;}while(P44==0);}}JZKey_Init();return key_num;
}void main(){Init_BZ();SMG_Init();DSQ_0_Init();JZKey_Init();DS1302_XieDate(23,59,30);while(1){EA=0;DS1302_GetDate();EA=1;Key_num=JZKey_GetKeynum();if(Key_num==12){jie_mian++;jie_mian=jie_mian%3;shi_jian_show_flag=0;}else if(Key_num==13){mo_shi++;mo_shi=mo_shi%2;}else if(Key_num==16&&jie_mian==2){can_shu++;if(can_shu>=99){can_shu=99;}}else if(Key_num==17&&jie_mian==2){//参数设置界面can_shu--;if(can_shu<=10){can_shu=10;}}else if(Key_num==17&&jie_mian==1){//时间显示界面shi_jian_show_flag=1;}else if(Key_num==0){shi_jian_show_flag=0;}if(flag==2){wen_du=DS18B20_GetWenDu();wen_du_temp=wen_du*10;flag=0;}}
}void DSQ_0_ZD() interrupt 1{flag0++;flag++;//L1时间技计数if(fen==0&&miao==0){L1_time_flag=1;if(mo_shi==1){//继电器受时间控制JDQ_flag=1;P2=(P2&0x1f)|0x00;P0=0x10;P2=(P2&0x1f)|0xa0;P2=(P2&0x1f)|0x00;}}else if(L1_time==0){JDQ_flag=0;P2=(P2&0x1f)|0x00;P0=0x00;P2=(P2&0x1f)|0xa0;P2=(P2&0x1f)|0x00;}if(L1_time_flag){L1_time++;if(L1_time>=5000){L1_time=0;L1_time_flag=0;if(mo_shi==1){//继电器受时间控制JDQ_flag=0;P2=(P2&0x1f)|0x00;P0=0x00;P2=(P2&0x1f)|0xa0;P2=(P2&0x1f)|0x00;}}}//继电器标志位if(mo_shi==0){//温度控制模式if(wen_du>can_shu){//继电器开JDQ_flag=1;P2=(P2&0x1f)|0x00;P0=0x10;P2=(P2&0x1f)|0xa0;P2=(P2&0x1f)|0x00;}else{//继电器关JDQ_flag=0;P2=(P2&0x1f)|0x00;P0=0x00;P2=(P2&0x1f)|0xa0;P2=(P2&0x1f)|0x00;}}//L3时间计数if(JDQ_flag){//继电器开启,L3开始闪烁L3_time++;L3_time=L3_time%200;}else{L3_time=0;}if(flag0>=1){flag0=0;P2=(P2&0x1f)|0x00;JieMian_Show();}LED_Show();
}void JieMian_Show(){switch(jie_mian){case 0:{//温度显示界面if(wen_du_temp>=100){SMG_Show(25,1,16,16,16,wen_du_temp/100,((wen_du_temp/10)%10)+32,wen_du_temp%10);}else if(wen_du_temp>=0){SMG_Show(25,1,16,16,16,16,(wen_du_temp/10)+32,wen_du_temp%10);}break;}case 1:{//时间显示界面if(shi_jian_show_flag){//显示分秒SMG_Show(25,2,16,fen/10,fen%10,17,miao/10,miao%10);}else{//显示时分SMG_Show(25,2,16,shi/10,shi%10,17,fen/10,fen%10);}break;}case 2:{//参数设置界面SMG_Show(25,3,16,16,16,16,can_shu/10,can_shu%10);break;}}
}void LED_Show(){uchar L1=0xff;uchar L2=0xff;uchar L3=0xff;if(L1_time>0){//L1时间大于0,时间计数启动,L1点亮L1=0xfe;}else{L1=0xff;}if(mo_shi==0){//温度控制模式,L2点亮L2=0xfd;}else{L2=0xff;}if((L3_time>=0&&L3_time<100)&&JDQ_flag==1){//继电器开启,L3闪烁L3=0xfb;}else{L3=0xff;}P0=L1&L2&L3;P2=(P2&0x1f)|0x80;P2=(P2&0x1f)|0x00;
}

Init.h

#ifndef __INIT_H_
#define __INIT_H_#include <STC15F2K60S2.H>void Init_BZ();#endif

Init.c

#include "Init.h"void Init_BZ(){P2=(P2&0x1f)|0xa0;P0=0x00;P2=(P2&0x1f)|0x80;P0=0xff;
}

SMG.h

#ifndef __SMG_H_
#define __SMG_H_#include <STC15F2K60S2.H>void SMG_Init();
void SMG_Show(unsigned char n1,n2,n3,n4,n5,n6,n7,n8);#endif

SMG.c

#include "SMG.h"unsigned char code SMG_ZK[]={                       //??????
//   0    1    2    3    4    5    6    7    8    9    A    B    C    D    E    F0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71,
//black  -     H    J    K    L    N    o   P    U     t    G    Q    r   M    y0x00,0x40,0x76,0x1E,0x70,0x38,0x37,0x5C,0x73,0x3E,0x78,0x3d,0x67,0x50,0x37,0x6e,0xBF,0x86,0xDB,0xCF,0xE6,0xED,0xFD,0x87,0xFF,0xEF,0x46};    //0. 1. 2. 3. 4. 5. 6. 7. 8. 9. -1void SMG_Init(){P2=(P2&0x1f)|0xc0;P0=0xff;P2=(P2&0x1f)|0xe0;P0=0xff;
}void SMG_Show(unsigned char n1,n2,n3,n4,n5,n6,n7,n8){static unsigned char i=0;i++;i=i%8;P2=(P2&0x1f)|0xc0;switch(i){case 1:{P0=0x01;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n1];break;}case 2:{P0=0x02;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n2];break;}case 3:{P0=0x04;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n3];break;}case 4:{P0=0x08;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n4];break;}case 5:{P0=0x10;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n5];break;}case 6:{P0=0x20;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n6];break;}case 7:{P0=0x40;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n7];break;}case 0:{P0=0x80;P2=(P2&0x1f)|0xe0;P0=~SMG_ZK[n8];break;}}P2=(P2&0x1f)|0x00;
}

DSQ.h

#ifndef __DSQ_H_
#define __DSQ_H_#include <STC15F2K60S2.H>void DSQ_0_Init();#endif

DSQ.c

#include "DSQ.h"void DSQ_0_Init(){AUXR |= 0x80;       //????????T???TMOD &= 0xF0;        //????????a??TL0 = 0x20;       //????????€?TH0 = 0xD1;        //????????€?TF0 = 0;       //???TF0???TR0 = 1;        //??????€?????EA=1;ET0=1;
}

YanShi.h

#ifndef __YANSHI_H_
#define __YANSHI_H_#include <STC15F2K60S2.h>
#include "intrins.h"void Delay10ms();#endif

YanShi.c

#include "YanShi.h"void Delay10ms()        //@12.000MHz
{unsigned char i, j;i = 117;j = 184;do{while (--j);} while (--i);
}

JZKey.h

#ifndef __JZKEY_H_
#define __JZKEY_H_#include "YanShi.h"void JZKey_Init();#endif

JZKey.c

#include "JZKey.h"void JZKey_Init(){P30=1;P31=1;P32=1;P33=1;P34=0;P35=0;P42=0;P44=0;
}

ds1302.h

#ifndef __DS1302_H
#define __DS1302_H#include <STC15F2K60S2.H>
#include <intrins.h>extern unsigned char shi,fen,miao;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 );void DS1302_XieDate(unsigned char h,unsigned char m,unsigned char s);
void DS1302_GetDate();#endif

ds1302.c

#include "ds1302.h"                                    unsigned char shi,fen,miao;//写字节
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);
}void DS1302_XieDate(unsigned char h,unsigned char m,unsigned char s){h=(h/10)*16+(h%10);m=(m/10)*16+(m%10);s=(s/10)*16+(s%10);Write_Ds1302_Byte(0x8e,0x00);Write_Ds1302_Byte(0x84,h);Write_Ds1302_Byte(0x82,m);Write_Ds1302_Byte(0x80,s);Write_Ds1302_Byte(0x8e,0x80);
}void DS1302_GetDate(){shi=Read_Ds1302_Byte(0x85);fen=Read_Ds1302_Byte(0x83);miao=Read_Ds1302_Byte(0x81);shi=(shi/16)*10+(shi%16);fen=(fen/16)*10+(fen%16);miao=(miao/16)*10+(miao%16);
}

onewire.h

#ifndef __ONEWIRE_H
#define __ONEWIRE_H#include <STC15F2K60S2.H>sbit DQ = P1^4;  unsigned char rd_temperature(void);
float DS18B20_GetWenDu();#endif

onewire.c

#include "onewire.h"//单总线内部延时函数
void Delay_OneWire(unsigned int t)
{unsigned char i;while(t--){for(i=0;i<12;i++);}
}//单总线写操作
void Write_DS18B20(unsigned char dat)
{unsigned char i;for(i=0;i<8;i++){DQ = 0;DQ = dat&0x01;Delay_OneWire(5);DQ = 1;dat >>= 1;}Delay_OneWire(5);
}//单总线读操作
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(5);}return dat;
}//DS18B20初始化
bit init_ds18b20(void)
{bit initflag = 0;DQ = 1;Delay_OneWire(12);DQ = 0;Delay_OneWire(80);DQ = 1;Delay_OneWire(10); initflag = DQ;     Delay_OneWire(5);return initflag;
}float DS18B20_GetWenDu(){float wen_du,xiao_shu,zheng_shu;unsigned char di,gao;init_ds18b20();Write_DS18B20(0xcc);Write_DS18B20(0x44);Delay_OneWire(200);init_ds18b20();EA=0;Write_DS18B20(0xcc);Write_DS18B20(0xbe);EA=1;EA=0;di=Read_DS18B20();gao=Read_DS18B20();EA=1;if(gao>=248){di=~di;gao=~gao;if(di==0xff){di=0;gao++;}else{di++;}zheng_shu=((gao<<4)|(di>>4))*1.0;xiao_shu=(di&0x0f)*0.0625;wen_du=-(zheng_shu+xiao_shu);}else{zheng_shu=((gao<<4)|(di>>4))*1.0;xiao_shu=(di&0x0f)*0.0625;wen_du=(zheng_shu+xiao_shu);}return wen_du;
}

蓝桥杯单片机第13届省赛程序题参考答案相关推荐

  1. 蓝桥杯单片机第11届国赛程序题参考答案

    答案仅供参考,有错误欢迎指正,非常感谢!!! 文件较多,代码较长,感谢查看!!! 目录 main.h main.c Init.h Init.c SMG.h SMG.c DSQ.h DSQ.c YanS ...

  2. 蓝桥杯单片机第8届省赛程序题参考答案

    答案仅供参考,有错误欢迎指正,非常感谢!!! 文件较多,代码较长,感谢查看!!! 目录 ​编辑 main.h main.c Init.h Init.c SMG.h SMG.c DLKey.h DLKe ...

  3. 蓝桥杯单片机第13届省赛程序设计题

    这次的省赛总体来说是比较简单,逻辑也比较容易,下面是我写的程序,还有点小隐患. #include"reg52.h" #include"ds1302.h" #in ...

  4. 蓝桥杯单片机第十届省赛程序题

    这套题总体来说还是比较简单的,我今天用了一个半小时就写出来了,但是还是用点问题,就是当S7按键的功能还有点没有实现,希望各位大佬帮帮忙,指教指教! #include"reg52.h" ...

  5. 蓝桥杯单片机:13届省赛模拟

    main.c #include "mycode.h" unsigned short int Timer1_count=0,Timer2_count=0,Timer0_count=0 ...

  6. 蓝桥杯单片机第13届省赛客观题

  7. 蓝桥杯单片机第七届省赛-模拟风扇控制系统

    九层妖塔 起于垒土 ● 改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改 蓝桥杯单片机第七届省赛-模拟风扇控制系统 Notes1:按键按下后在某些情况下给一定的缓冲时间 Notes2 ...

  8. 蓝桥杯【第13届省赛】Python 实现

    C语言网:2022年蓝桥杯第十三届大赛省赛真题https://www.dotcpp.com/oj/train/1023/这个题集涵盖了第十三届省赛所有组别的编程题,但 Python B 组的题解我写在 ...

  9. 【蓝桥杯单片机第十二届国赛真题】

    [蓝桥杯单片机第十二届国赛真题] 文章目录 [蓝桥杯单片机第十二届国赛真题] 前言 一.真题 二.源码 前言 有幸进入国赛,为自己大学最后一个比赛画上完满的句号^@^ 下面为蓝桥杯单片机第十二届国赛程 ...

最新文章

  1. python有什么用处案例_用实例解释Python中的继承和多态的概念
  2. RDKit | 基于随机森林(RF)预测SARS-CoV 3CL蛋白酶抑制剂的pIC50
  3. 2008域控服务器创建本地用户,[转载](一)安装win2008r2、域控、IIS、证书服务器、部署exchang...
  4. 什么是前端开发中的 mobile first 策略
  5. Java实现点击导出excel页面遮罩屏蔽,下载完成后解除遮罩
  6. Nagios_在不同平台下的安装
  7. 两个mapreduce 做topn_hadoop分布式计算MapReduce详细总结
  8. dbforge studio for oracle 注册,dbForge Studio for Oracle
  9. mysql 流量带宽_流量与带宽
  10. python wordpress xmlrpc 调用_20542通过wordpress_xmlrpc的python包远程操作wordpress 编辑 更新Post...
  11. RCNN学习笔记(1):Rich feature hierarchies for accurate object detection and semantic segmentation
  12. C# Winform关于控件TabControl闪烁的问题
  13. 如何玩转互联网金融大数据——征信
  14. html5青蛙过河,[推荐]===PS4上的本地多人游戏推荐心得===家庭聚会,欢乐时光 (持续更新)...
  15. 为什么p元素内不能嵌套Div元素(随笔)
  16. DNA: 人类的终极U盘
  17. SFP(Soft Filter Pruning)笔记
  18. 【报错记录】TypeError: __init__() takes 1 positional argument but 4 were given
  19. 青海出游全年时间表,你要收藏哟!
  20. Windows - 关于网络唤醒设置的说明

热门文章

  1. 阿里云、腾讯云centos7安装mysql
  2. 985研究生入职电网6个月,晒出收入,还以为看错了,kafka实战pdf
  3. 重复快捷键与简单的LOGO制作
  4. NOIP2021 T1 报数
  5. FPGA驱动silicon9011和silicon9134完成HDMI收发,提供工程源码和技术支持
  6. Vue 实现仿美团外卖APP的总结
  7. python 插件 库
  8. 芯片破壁者(十九):显卡的战国与帝国
  9. Qt 中控件右击菜单的翻译
  10. AliOS Thing正式开源,走近阿里云的物联网技术