前言
今年单片机试题比14届可以说是简单太多了(参加过14届,直接被创死555),题主提前两小时就交卷了,最后也是稳定拿下省一进入国赛(嘿嘿)。
一、问题重现
二、代码实现
下面给出main.c,而其他部分子函数由于较为基础,不再赘述。可前往stc15单片机进一步了解其他子函数的来源。
#include "main.h"
#include "key_smg.h"
#include "timer.h"
#include "ds1302.h"
#include "iic.h"
u8 smgflash=0;
u8 showpage=0,setpage=0,huixianpage=0;
u8 keyflash=0,keytemp=0,keynum=0;
u16 f=0,fflash=0,flimit=2000;
u8 fmaxtime[3]={
0,0,0};
int fjiaozun=0;
long ftemp=0,fmax=0;
u8 led[]={
1,1,1,1,1,1,1,1};u8 led1=0;
#define ledset outputp0(0x80,led[0]*1+led[1]*2+led[2]*4+led[3]*8+led[4]*16+led[5]*32+led[6]*64+led[7]*128)
void smgshowflash();
void keyfun();
void page0();
void page1();
void page2();
void page3();
void smgshowpage()
{
if(showpage==0)
{
page0();
}
else if(showpage==1)
{
page1();
}
else if(showpage==2)
{
page2();
}
else if(showpage==3)
{
page3();
}
}
void fun()
{
if(ftemp>fmax)
{
fmax=ftemp;
ds1302read();
fmaxtime[0]=ds1302dectime[0];
fmaxtime[1]=ds1302dectime[1];
fmaxtime[2]=ds1302dectime[2];
}
if(ftemp<0)
{
pcf_da(0);
}
else if(ftemp<=500&&ftemp>=0)
{
pcf_da(51);
}
else if(ftemp<=fmax&&ftemp>500)
{
pcf_da(256*4*(ftemp-500)/(fmax-500)/5+256/