#include <main.h>
extern uc code tab[20];//0~9
extern long Freq;//频率基础数据
extern uc freq_bz;//第一次数据读取标志
extern uc cont_led;//0.2s的切换亮灭
long freq_mg;//频率综合数据
long freq_max=0;
uc fl_freq=0;
uc sec,min,hour;//秒分时回显
uc S,F,M;//时分秒
uc pm=0,hm=0;//pm:参数标志/hm:回显标志
uc g_jm=0;//界面标志
int freq_cs=0;//校准
ui freq_xz=2000;//超限参数
uc tac[]={0x50,0x59,0x23,0x04,0x04,0x03,0x23};//时间初始化
/*********0.2sled灯闪烁********/
void led(unsigned char led_x)
{
if(cont_led==0)
{led_dlkz(led_x,ON);}//亮
if(cont_led==1)
{led_dlkz(led_x,OFF);}//灭
}
/********要求led模式***********/
void led_sz()
{
if(g_jm==0)//频率界面标志
{led(LED1);}
else
{led_dlkz(LED1,OFF);}
if(freq_mg>freq_xz)
{led(LED2);}
else
{led_dlkz(LED2,OFF);}
if(fl_freq==1)
{led_dlkz(LED2,ON);}
else if(freq_mg<freq_xz)
{led_dlkz(LED2,OFF);}
}
/***************频率显示函数***************/
void smg_pl()
{
OutputSMG(0,0x8e);
if(fl_freq==0)
{
if(freq_mg>9999)
OutputSMG(3,tab[freq_mg/10000]);
if(freq_mg>999)
OutputSMG(4,tab[freq_mg/1000%10]);
if(freq_mg>99)
OutputSMG(5,tab[freq_mg/100%10]);
if(freq_mg>9)
OutputSMG(6,tab[freq_mg/10%10]);
OutputSMG(7,tab[freq_mg%10]);
}
if(fl_freq==1)
{
OutputSMG(1,0xff);
OutputSMG(2,0xff);
OutputSMG(3,0xff);
OutputSMG(4,0xff);
OutputSMG(5,0xff);
OutputSMG(6,0xc7);
OutputSMG(7,0xc7);
}
}
/***************最高频率回显函数***************/
void hx_p()
{
OutputSMG(0,0x89);
OutputSMG(1,0x8e);
if(freq_max>9999)
OutputSMG(3,tab[freq_max/10000]);
if(freq_max>999)
OutputSMG(4,tab[freq_max/1000%10]);
if(freq_max>99)
OutputSMG(5,tab[freq_max/100%10]);
if(freq_max>9)
OutputSMG(6,tab[freq_max/10%10]);
OutputSMG(7,tab[freq_max%10]);
}
/***************时间回显函数***************/
void hx_t()
{
OutputSMG(0,0x89);
OutputSMG(1,tab[10]);
OutputSMG(2,tab[hour/10]);
OutputSMG(3,tab[hour%10]);
OutputSMG(4,tab[min/10]);
OutputSMG(5,tab[min%10]);
OutputSMG(6,tab[sec/10]);
OutputSMG(7,tab[sec%10]);
}
/***************回显切换函数***************/
void smg_hx()
{
if(hm==0)
{hx_p();}
if(hm==1)
{hx_t();}
}
/***************超限参数显示函数***************/
void smg_p2()
{
OutputSMG(0,P);
OutputSMG(1,tab[1]);
OutputSMG(4,tab[freq_xz/1000%10]);
OutputSMG(5,tab[freq_xz/100%10]);
OutputSMG(6,tab[freq_xz/10%10]);
OutputSMG(7,tab[freq_xz%10]);
}
/***************校准参数显示函数***************/
void smg_p3()
{
ui freq_d;
OutputSMG(0,P);
OutputSMG(1,tab[2]);
if(freq_cs>=0)
{
OutputSMG(4,0xff);
OutputSMG(5,tab[freq_cs/100]);
OutputSMG(6,tab[freq_cs/10%10]);
OutputSMG(7,tab[freq_cs%10]);
}
else
{
OutputSMG(4,0xbf);
freq_d=-freq_cs;
OutputSMG(5,tab[freq_d/100]);
OutputSMG(6,tab[freq_d/10%10]);
OutputSMG(7,tab[freq_d%10]);
}
}
/***************频率处理函数***************/
void freq_cl(void)
{
freq_mg=Freq+freq_cs;//测量加校准
if(freq_mg>=0)
{
fl_freq=0;
if(freq_mg>freq_max)
{
freq_max=freq_mg;
readtime(tac);
hour=(tac[2]>>4)*10+(tac[2]&0x0f);
min= (tac[1]>>4)*10+(tac[1]&0x0f);
sec= (tac[0]>>4)*10+(tac[0]&0x0f);
}
}
else
{fl_freq=1;}
}
void smg_p()
{
if(pm==0)
{smg_p2();}
if(pm==1)
{smg_p3();}
}
/***********时钟函数*************/
void smg_sz()
{
readtime(tac);
S=(tac[2]>>4)*10+(tac[2]&0x0f);
F=(tac[1]>>4)*10+(tac[1]&0x0f);
M=(tac[0]>>4)*10+(tac[0]&0x0f);
OutputSMG(0,tab[S/10]);
OutputSMG(1,tab[S%10]);
OutputSMG(2,tab[15]);
OutputSMG(3,tab[F/10]);
OutputSMG(4,tab[F%10]);
OutputSMG(5,tab[15]);
OutputSMG(6,tab[M/10]);
OutputSMG(7,tab[M%10]);
}
/***************DAC输出处理函数***************/
void ad_da(void)
{
uc dac;
if(fl_freq==0)
{
if(freq_mg<500)
{I2c_write(51);}
else if(freq_mg<freq_xz)
{
dac=((255.0-51.0)/(freq_xz-500.0))*(freq_mg-500)+51;
I2c_write(dac);
}
if(fl_freq==1)
{I2c_write(0);}
}
}
/***************按键处理函数***************/
void key_cl(void)
{
static uc key=0;
key=keycan();
if(key==KEY3)//界面标志切换
{g_jm++;if(g_jm>3){g_jm=0;}}
if(key==KEY1&&g_jm==1)
{pm++;if(pm>1){pm=0;}}//参数切换
if(key==KEY1&&g_jm==3)//回显切换
{hm++;if(hm>1){hm=0;}}
if(key==KEY4&&pm==0&&g_jm==1)
{freq_xz+=1000;if(freq_xz>9000){freq_xz=1000;}}//超限参数加
if(key==KEY2&&pm==0&&g_jm==1)
{freq_xz-=1000;if(freq_xz<1000){freq_xz=9000;}}//超限参数减
if(key==KEY4&&pm==1&&g_jm==1)
{freq_cs+=100;if(freq_cs>900){freq_cs=-900;}}//校准参数加
if(key==KEY2&&pm==1&&g_jm==1)
{freq_cs-=100;if(freq_cs<-900){freq_cs=900;}}//校准参数减
}
/***************界面显示函数***************/
void jm()
{
switch(g_jm)
{
case 0:smg_pl();break;
case 1:smg_p();break;
case 2:smg_sz();break;
case 3:smg_hx();break;
}
}
/*********MAIN函数**********/
void main()
{
system_init();
Timer1Init();
I2c_init();
writetime(tac);
while(freq_bz==0){};
while(1)
{
key_cl();
freq_cl();
led_sz();
ad_da();
jm();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
第十五届蓝桥杯单片机第一场代码
共35个文件
obj:7个
lst:7个
c:6个
需积分: 5 1 下载量 109 浏览量
2024-04-16
20:14:59
上传
评论
收藏 87KB ZIP 举报
温馨提示
15届蓝桥杯单片机省赛代码
资源推荐
资源详情
资源评论
收起资源包目录
ONE_15DPJ.zip (35个子文件)
ONE_15DPJ
Initsystem
led.h 293B
led.c 2KB
Objects
led.obj 12KB
15 69KB
15.hex 14KB
15.build_log.htm 1KB
15.lnp 225B
ds1302.obj 8KB
STARTUP.obj 819B
freq.obj 10KB
iic.obj 11KB
main.obj 26KB
key.obj 9KB
STARTUP.A51 6KB
15.uvopt 7KB
KEY
key.c 631B
key.h 170B
Listings
freq.lst 2KB
main.lst 10KB
key.lst 2KB
ds1302.lst 4KB
iic.lst 5KB
STARTUP.lst 14KB
15.m51 44KB
led.lst 4KB
15.uvproj 15KB
IIC
iic.h 146B
iic.c 2KB
DS1302
ds1302.h 129B
ds1302.c 1KB
Freq
freq.c 789B
freq.h 97B
main
main.h 607B
main.c 5KB
15.uvgui.32061 85KB
共 35 条
- 1
资源评论
唐诗宋詞
- 粉丝: 79
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功