//复习的都没考,感觉没有区分度,靠选择题拿分,总体来说比较简单,跟省赛差不多,结果是国二

#include "tim.h"
#include "seg.h"
#include "stdio.h"
#include "key.h"
#include "STC15F2K60S2.h"
#include "i2c.h"
#include "ds1302.h"
#include "onewire.h"
unsigned char ucSec, ucLed;
unsigned char ucKey_Dly, ucKey_Old;
unsigned char pucSeg_Buf[9], pucSeg_Code[8], ucSeg_Pos;//pucseg_buf储存阿拉伯数字,code储存16进制
unsigned long ulms,ulKey_Time;
unsigned int ulms1=0;
unsigned long ulms2=0;//判断进入亮暗程度时间
unsigned int ulms3=0;//每250ms读取时钟
unsigned char pucRtc[3] = {16, 59, 50};//设置时间及读取时间
unsigned int temp=0;//读取的温度
unsigned int liangan=0;//Pcf8591_adc读取数据
unsigned char pucRtc_judge=17;//时间参数
unsigned int led_judge=4;//指示灯参数
unsigned int temp_judge=25;//温度参数
unsigned char mode=0;//mode0用来判断时间、温度、亮暗界面
unsigned char mode1=0;//mode1用来判断是否为参数设置界面
unsigned char mode2=0;//判断是否3s结束
unsigned char mode3=0;//mode3用来判断是否为遮挡状态,分压0.5V下判断为暗数

unsigned char led1=0;//决定led1是否亮灭
unsigned char led2=0;//决定led2是否亮灭
unsigned char led3=0;//决定led3是否亮灭
void Key_Proc(void);//按键检测函数
void show();//数码管显示函数
void leddo()//led工作
{
unsigned char ledshow=0;//传递led参数
led1=0;
led2=0;
if(pucRtc_judge<=8)//时间应在两者之间
{
if(pucRtc[0]>=pucRtc_judge&&pucRtc[0]<=8)
{
led1=1;
}
}
else if(pucRtc_judge>8)
{
if(pucRtc[0]>=pucRtc_judge&&pucRtc[0]<=32)//第二天8点
{
led1=1;
}
}
if(temp<temp_judge*16)
{
led2=1;
}
if(mode3==1)
{
ledshow=led1|(led2<<1)|(led3<<2)|(1<<led_judge-1);
}
else
{
ledshow=led1|(led2<<1)|(led3<<2);
}
Led_Disp(ledshow);
}
void show()
{
int i=0;
for(;i<10;i++)//将数据清空,防止存储错误
{
pucSeg_Buf[i]=' ';
}
leddo();
if(mode1==0)//数据界面
{
if(mode==0)//时钟显示界面
{
sprintf(pucSeg_Buf, "%2u-%2u-%2u", (unsigned int)pucRtc[0],(unsigned int)pucRtc[1],(unsigned int)pucRtc[2]);
}
if(mode==1)//温度显示界面
{
pucSeg_Buf[0]='C';
sprintf(pucSeg_Buf+4, " %03.1f", (int)temp/16.0);//打入字符串,以字符形式储存
}
if(mode==2)//adc光亮暗程度显示界面,分压0.5V下判断为暗
{
pucSeg_Buf[0]='E';
sprintf(pucSeg_Buf+2, "%03.2f %u", (float)(liangan*5.0/256.0),(unsigned int)mode3);//打入字符串,以字符形式储存
}
}
else if(mode1==1)//参数设置界面
{
if(mode==0)//时钟参数界面
{
sprintf(pucSeg_Buf, "P%u %2u",(unsigned int)mode+1,(unsigned int)pucRtc_judge);
}
if(mode==1)//温度参数界面
{
sprintf(pucSeg_Buf, "P%u %2u",(unsigned int)mode+1,(unsigned int)temp_judge);
}
if(mode==2)//指示灯参数界面
{
sprintf(pucSeg_Buf, "P%u %u",(unsigned int)mode+1,(unsigned int)led_judge);
}
}
Seg_Tran(pucSeg_Buf, pucSeg_Code);//将阿拉伯数字转换成16进制
}
void key_do(unsigned char key_value)
{
if(key_value==4&&mode1==0)//进入参数设置界面
{
mode=0;
mode1=1;
}
else if(key_value==4&&mode1==1)//进入显示界面
{
mode=0;
mode1=0;
}
else if(key_value==5)//切换
{
mode+=1;
if(mode>2)
{
mode=0;
}
}
else if(key_value==8&&mode1==1)//参数减
{
if(mode==0)//时间参数
{
if(pucRtc_judge==0)//减到23点
{
pucRtc_judge=23;
}
else
{
pucRtc_judge-=1;
}
}
else if(mode==1)//温度参数
{
if(temp_judge!=0)//最小为01
{
temp_judge-=1;
}
}
else if(mode==2)//LED参数
{
if(led_judge!=4)//最小为01
{
led_judge-=1;
}
}
}
else if(key_value==9&&mode1==1)//参数加
{
if(mode==0)//时间参数
{
if(pucRtc_judge==23)//加到0点
{
pucRtc_judge=0;
}
else
{
pucRtc_judge+=1;
}
}
else if(mode==1)//温度参数
{
if(temp_judge<99)//最大为99
{
temp_judge+=1;
}
else
{
temp_judge=99;
}
}
else if(mode==2)//LED参数
{
if(led_judge!=8)//最小为01
{
led_judge+=1;
}
}
}
}
void main(void)
{
Cls_Peripheral();
Timer1Init();
sprintf(pucSeg_Buf, "%2u-%2u-%2u", (unsigned int)pucRtc[0],(unsigned int)pucRtc[1],(unsigned int)pucRtc[2]);
Seg_Tran(pucSeg_Buf, pucSeg_Code);//将阿拉伯数字转换成16进制
TR1=1;
Set_RTC(pucRtc);

while(1)
{
if(ulms==150)
{
show();//数码管显示
}
Key_Proc();//按键检测

if(ulms1==150)
{
temp=DS18B20_Read();//读取温度
}
if(ulms1==50)
{
liangan=Pcf8591_adc();//读取亮暗程度
if(liangan<26)
{
if(mode3==0)
{
mode2=1;//计时标志位
ulms2=0;
}
mode3=1;
}
else
{
if(mode3==1)
{
mode2=1;//计时标志位
ulms2=0;
}
mode3=0;
}
}
}
}
void Time_1(void) interrupt 3
{
if(++ucKey_Dly == 10)
ucKey_Dly = 0;
ulms++;
ulms1++;
ulms3++;
if(ulms3==150)
{
Read_RTC(pucRtc);//读取时钟
}
if(ulms3>300)
{
ulms3=0;
}
if(mode2==1&&ulms2<1801)
{
ulms2++;
}
if(ulms2>1900)
{
ulms2=0;
mode2=0;
if(mode3==0)
{
led3=0;
}
else
{
led3=1;
}
}
if(ulms1>201)
{
ulms1=0;
}
if(ulms==200)
{
ulms=0;
}
Seg_Disp(pucSeg_Code, ucSeg_Pos);
if(++ucSeg_Pos == 8) ucSeg_Pos = 0;
}
void Key_Proc(void)
{
unsigned char ucKey_Val, ucKey_Down;
if(ucKey_Dly) return;
ucKey_Dly = 1;
ucKey_Val = Key_Read();
ucKey_Down = ucKey_Val & (ucKey_Old ^ ucKey_Val);//^按位异或
ucKey_Old = ucKey_Val;
if(ucKey_Down)//判断old是否和新的一样,一样说明是同一个,不会进入
{
ulKey_Time = ulms;
key_do(ucKey_Down);
}
}

蓝桥杯单片机类第十一届国赛代码(国二)相关推荐

  1. 【蓝桥杯单片机组第十一届省赛】— 客观试题

    目录 题目1 题目2 题目3 题目4 题目5 题目6 题目7 题目8 题目9

  2. 【蓝桥杯单片机组第十一届省赛】— 程序设计部分(第二场)

    1.硬件框图 2.功能描述 2.1 基本功能 2.2 设计要求

  3. 第十一届蓝桥杯 单片机设计与开发省赛试题

    第十一届蓝桥杯 单片机设计与开发 省赛 在昨天举办了第一波11届蓝桥杯比赛,第2波大概在10月份左右,看了看比赛题目,这次题目对于我来说,程序设计题简单,客观题全靠蒙! 本次比赛涉及: 1.数码管显示 ...

  4. 最新 2021年 第十二届 蓝桥杯 单片机设计与开发 省赛 客观试题 个人答案

    第十二届蓝桥杯单片机设计与开发项目省赛 第一部分客观试题(30分) 不定项选择(3分/题) (1)MCS-51单片机外部中断1的中断请求标志是( B ).     A.ET1        B.IE1 ...

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

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

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

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

  7. 蓝桥杯单片机第十届省赛题程序实现

    文章目录 main.c iic.c main.c #include<reg52.h> #include<intrins.h> #include<iic.h>sbit ...

  8. 【蓝桥杯单片机】2023官方底层驱动代码【补充点】

    第14届蓝桥杯单片机设计,官方提供了新的底层驱动代码版本, 虽然依旧是onewire.iic.ds1302这三个源文件, 但是并没有给出头文件,且在此三个源文件中缺少了一些必要的管脚定义 下面是本人在 ...

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

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

最新文章

  1. 第1关:8位可控加减法电路设计
  2. c++数据结构中 顺序队列的队首队尾_数据结构 3.3 顺序队
  3. 如何使python print输出不换行
  4. 如何利用1%推广费用提高50%的用户增长
  5. zipfile不能解压分卷压缩的文件
  6. sumif三个条件怎么填_函数SUMIF和SUMIFS
  7. [loj556][Antileaf's Round]咱们去烧菜吧
  8. SQL语言基础:SQL语言概念知识笔记
  9. 补习系列(8)-springboot 单元测试之道
  10. 丁磊:很多人来网易工作只是为了谋生而不是兴趣
  11. Linux系统管理之用户和组
  12. hdu1426 Sudoku Killer
  13. 百度地图迁徙大数据_百度地图大数据看十一:各地商圈出现“红色拥堵”,游乐场迎来“高光时刻”...
  14. R语言从github安装recharts包
  15. 《大数据之路-阿里巴巴大数据实践》第九章 阿里巴巴数据整合及管理体系
  16. 4.0版本的wed.xml。 中间的部分是配置springMVC的。
  17. WP模板兔模板V4.3 去除授权+多功能插件
  18. Virtuous Ten Studio反编译APK教程入门
  19. Alphafold2:Highly accurate protein structure prediction with AlphaFold
  20. 爬虫获取西刺免费高匿代理

热门文章

  1. 15 -python之文件操作
  2. 小程序的学习步骤计划
  3. 汇编--在屏幕上显示彩色字体
  4. 创业者移动互联网下半场的机会!
  5. 斗地主(dfs+模拟)
  6. pytorch一元二次函数 拟合 机器学习
  7. 状态驱动的游戏智能体设计
  8. Linux中常用的查看系统信息的操作指令
  9. quartus ii 9.0连接驱动程序USB blaster驱动安装
  10. 关于路面裂缝数据集crack500的设置