#include "init.h"
#include "led.h"
#include "seg.h"
#include "key.h"
#include "iic.h"
#include "ds1302.h"
#include "stdio.h"
#include "tim.h"
//seg
unsigned char pucSeg_Buf[12],pucSeg_Code[8],ucSeg_Pos=0;
//freq
long Freq=0;//int -32768 32767
long Freq_Max=0;
//RTC
unsigned char pucRTC[3]={23,59,55};
unsigned char pucRTC_Freq[3]={23,59,55};
//param
long Cal_Param=0;
unsigned int Limit_Param=2000;
//key
unsigned char Key_Val=0,Key_Val_Old=0;
//timer
unsigned long ulms=0;
unsigned int uiSeg_Dly=0;
unsigned int uiKey_Dly=0;
unsigned int uiRTC_Dly=0;
unsigned int uiDAC_Dly = 0;
unsigned int uiLed_Dly = 0;
//Led
unsigned char ucLed = 0x00;
unsigned char L1_Flag = 0;
unsigned char L2_Flag = 0;
//function
void Seg_Proc(void);
void Key_Proc(void);
void RTC_Proc(void);
void DAC_Proc(void);
void Led_Proc(void);
//mode
unsigned char Disp_Mode=0;
unsigned char Para_Mode=0;
unsigned char Record_Mode=0;
void main(void)
{
Cls_Peripheral();
Timer0Init();
Timer1Init();
Set_RTC(pucRTC);
EA=1;
while(1)
{
Seg_Proc();
Key_Proc();
RTC_Proc();
DAC_Proc();
Led_Proc();
}
}
void Seg_Proc(void)
{
if(uiSeg_Dly<100)
return;
uiSeg_Dly=0;
if(Disp_Mode==0)
{
if(Freq>=0)
sprintf(pucSeg_Buf,"F %5ld",Freq);
else
sprintf(pucSeg_Buf,"F LL");
}
else if(Disp_Mode==1)
{
if(Para_Mode==0)
{
sprintf(pucSeg_Buf,"P1 %4u",Limit_Param);
}
else
{
sprintf(pucSeg_Buf,"P2 %4ld",Cal_Param);
}
}
else if(Disp_Mode==2)
{
sprintf(pucSeg_Buf,"%02u-%02u-%02u",(unsigned int)pucRTC[0],(unsigned int)pucRTC[1],(unsigned int)pucRTC[2]);
}
else
{
if(Record_Mode==0)
{
sprintf(pucSeg_Buf,"HF %5ld",Freq_Max);
}
else
{
sprintf(pucSeg_Buf, "HA%02u%02u%02u", (unsigned int)pucRTC_Freq[0], (unsigned int)pucRTC_Freq[1], (unsigned int)pucRTC_Freq[2]);
}
}
Seg_Tran(pucSeg_Buf,pucSeg_Code);
}
void RTC_Proc(void)
{
if(uiRTC_Dly<200)
return;
uiRTC_Dly=0;
Get_RTC(pucRTC);
}
void DAC_Proc(void)
{
float k, b;
unsigned char ucDAC;
if(uiDAC_Dly < 200)
return;
uiDAC_Dly = 0;
if(Freq < 0)
PCF8591_DAC(0);
else if(Freq < 500)
PCF8591_DAC(51);
else if(Freq > Limit_Param)
PCF8591_DAC(255);
else
{
k = 204.0/(Limit_Param - 500.0);
b = 51 - 500.0*k;
ucDAC = k*Freq + b;
PCF8591_DAC(ucDAC);
}
}
void Key_Proc(void)
{
if(uiKey_Dly<20)
return;
uiKey_Dly=0;
Key_Val=Key_Read_KBD();
if(Key_Val==Key_Val_Old)
return;
switch(Key_Val)
{
case 4:
Disp_Mode=(Disp_Mode+1)%4;
if(Disp_Mode==1)
{
Para_Mode=0;
}
else if(Disp_Mode == 3)
{
Record_Mode = 0;
}
break;
case 5:
if(Disp_Mode==1)
{
Para_Mode=(Para_Mode+1)%2;
}
else if(Disp_Mode == 3)
{
Record_Mode = (Record_Mode + 1) % 2;
}
break;
case 9:
if(Disp_Mode==1)
{
if(Para_Mode==0)
{
if(Limit_Param>1000)
{
Limit_Param-=1000;
}
}
else
{
if(Cal_Param>-900)
{
Cal_Param-=100;
}
}
}
break;
case 8:
if(Disp_Mode==1)
{
if(Para_Mode==0)
{
if(Limit_Param<9000)
{
Limit_Param+=1000;
}
}
else
{
if(Cal_Param<900)
{
Cal_Param+=100;
}
}
}
break;
}
Key_Val_Old=Key_Val;
}
void Led_Proc(void)
{
if(uiLed_Dly < 100)
return;
uiLed_Dly = 0;
if(Disp_Mode == 0)
{
L1_Flag = (L1_Flag + 1) % 2;
if(L1_Flag == 0)
ucLed ^= 0x01;
}
else
{
ucLed &= ~0x01;
}
if(Freq < 0)
{
ucLed |= 0x02;
}
else if(Freq > Limit_Param)
{
L2_Flag = (L2_Flag + 1) % 2;
if(L2_Flag == 0)
ucLed ^= 0x02;
}
else
{
ucLed &= ~0x02;
}
Led_Disp(ucLed);
}
void Timer1(void) interrupt 3
{
ulms++;
uiSeg_Dly++;
uiKey_Dly++;
uiRTC_Dly++;
uiDAC_Dly++;
uiLed_Dly++;
if(ulms%2==0)
{
ucSeg_Pos=(ucSeg_Pos+1)%8;
Seg_Disp(pucSeg_Code,ucSeg_Pos);
}
if(ulms%1000==0)
{
Freq=(unsigned int)(TH0<<8)|TL0;
Freq+=Cal_Param;
if(Freq>Freq_Max)
{
Freq_Max=Freq;
pucRTC_Freq[0]=pucRTC[0];
pucRTC_Freq[1]=pucRTC[1];
pucRTC_Freq[2]=pucRTC[2];
}
TH0=0;
TL0=0;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
第十五届蓝桥杯单片机省赛真题解析

共39个文件
obj:8个
c:8个
lst:8个

需积分: 0 0 下载量 28 浏览量
更新于2025-03-22
1
收藏 86KB ZIP 举报
第十五届蓝桥杯单片机省赛真题解析
收起资源包目录













































共 39 条
- 1
资源推荐
资源预览
资源评论
2024-04-13 上传
170 浏览量
2021-08-05 上传
2023-06-30 上传
199 浏览量
2022-04-06 上传

133 浏览量

197 浏览量

167 浏览量

191 浏览量

107 浏览量
2025-03-13 上传

196 浏览量
1564 浏览量
资源评论


promising-w

- 粉丝: 4623
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


安全验证
文档复制为VIP权益,开通VIP直接复制
