蓝桥杯第十四届省赛代码参考

#include "STC15F2K60S2.h"

#include "Init.h"

#include "Seg.h"

#include "Key.h"

#include "Led.h"

#include "iic.h"

#include "ds1302.h"

unsigned char Seg_Slow_Down;

unsigned char Key_Slow_Down;

unsigned char Key_Val,Key_Old,Key_Down,Key_Up;

unsigned char Seg_Pos;

unsigned char Seg_Buf8={10,10,10,10,10,10,10,10};

unsigned char Seg_Point8 ={0,0,0,0,0,0,0,0};

unsigned char ucLed8 = {0,0,0,0,0,0,0,0};

unsigned int Timer1s;

unsigned int Freq;

float temp;

unsigned char Seg_Disp_Mode;//0-频率 1-参数 2-时间 3-回显

unsigned char Param_Mode;

int Param_Max =2000;

int Param_Disp=200;

int Param_Ctrol=200;

unsigned char ucRtc3 ={0x20,0x23,0x22};

unsigned int Freq_Max =0;

unsigned char ucRtc_Max\[\] = {0x00,0x00,0x00};

unsigned char Choice_Index;

unsigned char Timer_200ms;

bit Star_Flag;

float Vol;

void Key_Proc()

{

if(Key_Slow_Down) return;

Key_Slow_Down =1;

Key_Val = Key_Read();

Key_Down =Key_Val&(Key_Old^Key_Val);

Key_Up =~Key_Val&(Key_Old^Key_Val);

Key_Old = Key_Val;

switch (Key_Down)

{

case 4:

if(++Seg_Disp_Mode==4) Seg_Disp_Mode =0;

if(Seg_Disp_Mode == 2) Param_Mode=0;

if(Seg_Disp_Mode==0) Choice_Index=0;

break;

case 5:

if(Seg_Disp_Mode == 1)

{

if(++Param_Mode == 2) Param_Mode=0;

}

else if(Seg_Disp_Mode==3)

{

if(++Choice_Index == 2) Choice_Index=0;

}

break;

case 8: // 加法操作按键

if(Seg_Disp_Mode ==1)

{

if(Param_Mode == 0)

{ if(Param_Max<9000&&Param_Max>-9000)

Param_Max +=1000;

}

else

{

Param_Disp +=100;

Param_Ctrol =Param_Disp;

}

}

break;

case 9: // 减法操作按键

if(Seg_Disp_Mode ==1)

{

if(Param_Mode == 0)

{ if(Param_Max<9000&&Param_Max>-9000)

Param_Max -=1000;

}

else

{if(Param_Disp<900&&Param_Disp>-900)

Param_Disp -=100;

Param_Ctrol =Param_Disp;

}

}

break;

}

}

void Seg_Proc()

{

unsigned char i=0;

if(Seg_Slow_Down)return;

Seg_Slow_Down = 1;

Read_Rtc(ucRtc);

temp =AD_Read(0x03) /51.0;

DA_Write(Vol);

if(Freq_Max<=Freq)

{

Freq_Max = Freq;

for(i=0;i<3;i++){

ucRtc_Maxi =ucRtci;

}

}

switch (Seg_Disp_Mode)

{

case 0:

for(i=0;i<8;i++)

{

Seg_Bufi =10;

Seg_Pointi=0;

}

if(Freq<0) {Seg_Buf6 = Seg_Buf7 = 20;

}

else{

Seg_Buf0 =16;

Seg_Buf3 =Freq>10000?Freq/10000%10:10;

Seg_Buf4 = Freq/1000%10;

Seg_Buf5 =Freq/100%10;

Seg_Buf6 =Freq/10%10;

Seg_Buf7 =Freq%10;}

break;

case 1:

for(i=0;i<8;i++)

{

Seg_Bufi =10;

Seg_Pointi=0;

}

Seg_Buf0 = 17;

Seg_Buf1 = Param_Mode+1;

switch(Param_Mode){

case 0:

if(Param_Max>0){

Seg_Buf4 =Param_Max/1000%10;

Seg_Buf5 =Param_Max/100%10;

Seg_Buf6 =Param_Max/10%10;

Seg_Buf7 =Param_Max%10;}

if(Param_Max<0){

Seg_Buf3 =18;

Seg_Buf4 =-Param_Max/1000%10;

Seg_Buf5 =-Param_Max/100%10;

Seg_Buf6 =-Param_Max/10%10;

Seg_Buf7 =-Param_Max%10;

}

if(Param_Max==0) Seg_Buf7 = 0;

break;

case 1:

if(Param_Disp>0){

Seg_Buf5 =Param_Disp/100%10;

Seg_Buf6 =Param_Disp/10%10;

Seg_Buf7 =Param_Disp%10;

}

else if(Param_Disp==0) Seg_Buf7 =0;

else if(Param_Disp<0){

Seg_Buf4 =18;

Seg_Buf5 =-Param_Disp/100%10;

Seg_Buf6 =-Param_Disp/10%10;

Seg_Buf7 =-Param_Disp%10;

}

break;

}

break;

case 2:

for(i=0;i<8;i++)

{

Seg_Bufi =10;

Seg_Pointi=0;

}

Seg_Buf2 =Seg_Buf5 = 18;

for(i=0;i<3;i++)

{

Seg_Buf3\*i =ucRtci/16%10;

Seg_Buf3\*i+1 =ucRtci%16;

}

break;

case 3:

if(Choice_Index ==0){

for(i=0;i<8;i++)

{

Seg_Bufi =10;

Seg_Pointi=0;

}

Seg_Buf0 =19;

Seg_Buf1 =16;

Seg_Buf3 =Freq_Max>10000?Freq_Max/10000%10:10;

Seg_Buf4 = Freq_Max/1000%10;

Seg_Buf5 =Freq_Max/100%10;

Seg_Buf6 =Freq_Max/10%10;

Seg_Buf7 =Freq_Max%10;}

else if(Choice_Index == 1)

{

for(i=0;i<8;i++)

{

Seg_Bufi =10;

Seg_Pointi=0;

}

Seg_Buf0 =19;

Seg_Buf1 =14;

for(i=1;i<4;i++)

{

Seg_Buf2\*i =ucRtc_Maxi-1/16%10;

Seg_Buf2\*i+1 = ucRtc_Maxi-1%16;

}

}

break;

}

}

void Led_Proc()

{

if(Freq<500) Vol =1.0;

else if(Freq>Param_Max) Vol =5.0;

else if(Freq<Param_Max&&Freq>500)

Vol = (Freq-500)*4/(Param_Max-500)+1;

if(Seg_Disp_Mode==0)

ucLed0 = Star_Flag?1:0;

if(Freq>Param_Max)

ucLed1 =Star_Flag?1:0;

if(Freq<0) ucLed1 =1;

}

void Timer0_Init(void) //1毫秒@12.000MHz

{

AUXR &= 0x7F; //定时器时钟12T模式

TMOD &= 0xF0; //设置定时器模式

TMOD |=0x05;

TL0 = 0; //设置定时初始值

TH0 = 0; //设置定时初始值

TF0 = 0; //清除TF0标志

TR0 = 1; //定时器0开始计时

}

void Timer1_Init(void) //1毫秒@12.000MHz

{

AUXR &= 0xBF; //定时器时钟12T模式

TMOD &= 0x0F; //设置定时器模式

TL1 = 0x18; //设置定时初始值

TH1 = 0xFC; //设置定时初始值

TF1 = 0; //清除TF1标志

TR1 = 1; //定时器1开始计时

ET1 =1;

EA =1;

}

void Timer1_Server() interrupt 3

{

if(++Key_Slow_Down == 20) Key_Slow_Down =0;

if(++Seg_Slow_Down == 500) Seg_Slow_Down =0;

if(++Seg_Pos == 8) Seg_Pos=0;

Seg_Disp(Seg_Pos,Seg_BufSeg_Pos,Seg_PointSeg_Pos);

Led_Disp(Seg_Pos,ucLedSeg_Pos);

if(++Timer1s ==1000)

{

Timer1s =0;

Freq =TH0<<8|TL0;

Freq +=Param_Ctrol;

TH0 =TL0 =0;

}

if(++Timer_200ms == 200)

{

Timer_200ms =0;

Star_Flag ^=1;

}

}

void main()

{

Set_Rtc(ucRtc);

System_Init();

Timer0_Init();

Timer1_Init();

while(1)

{

Key_Proc();

Seg_Proc();

Led_Proc();

}

}

相关推荐
顶点多余6 小时前
9.16 面试总结
linux·面试·职场和发展
yuanxi2001 天前
圣湘生物的三重转变:用PSS⁵价值力看懂从卖单品到卖经营价值
职场和发展·创业创新·学习方法
weixin_435208161 天前
【大模型面试宝典】开源啦!!!
人工智能·职场和发展·agent·deepseek
jianqiang.xue1 天前
如何做好IT类的技术面试?
面试·职场和发展
y1su1 天前
【Leetcode】1477. 找两个和为目标值且不重叠的子数组
数据结构·后端·算法·leetcode·职场和发展
hqyjzsb2 天前
规划工商管理大学成长:搭建四层能力体系,重视高阶的 AI 能力建设
开发语言·人工智能·python·microsoft·职场和发展·数据挖掘·业界资讯
小刘在重生~2 天前
十六(3)、《集合扩充》CopyOnWriteArrayList 超详细解析(线程安全集合)
java·笔记·面试·职场和发展
June bug3 天前
【HCIA- AI(正课)】3.1.人工智能业务流程
职场和发展
颜挺锐3 天前
如何轻松通过性能测试面试之第十一篇:如何判断应用的最大处理能力
面试·职场和发展
DeepAgent3 天前
AI Agent 面试篇(01):AI 岗位面试到底怎么走——从网申到 Offer 的完整流程
人工智能·面试·职场和发展