蓝桥杯单片机学习过程记录(十六)第八届电子钟
这届做的时间好像有点久,在中间关于时钟显示页面并设置这一步停了好久,后来设置了三个变量,得出了显示较为不错的结果,稍后去研究以下大佬们的代码学习学习。
还有一个问题是定时器的问题,定时器0的定时跟时钟差不多,但是定时器1就很有问题,40次却跟200差不多,不知道哪里的问题。
内容:
数码管、小灯
独立按键、定时器
温度传感器ds18b20
时钟芯片ds1302
主函数:
//第八届电子钟
#include<STC15F2K60S2.H>
#include<intrins.h>
#include<onewire.h>
#include<ds1302.h>
sbit s7=P3^0;
sbit s6=P3^1;
sbit s5=P3^2;
sbit s4=P3^3;
unsigned char count_1,tt_1;
unsigned char count,tt;
unsigned char init_time[]={
50,59,23,0,0,0,0};
char time[7],time_temp[7],time_result[7];
char time_set[]={
0,0,0};
unsigned char flag_yemian,flag_set,flag_set_1,flag_led;
unsigned char seg[]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff,0xc6};
unsigned char yi,er,san,si,wu,liu,qi,ba;
unsigned char wendu;
void allinit();
void delayms(int ms);
void display_12(yi,er);
void display_34(san,si);
void display_56(wu,liu);
void display_78(qi,ba);
void Timer0Init(void);
void Timer1Init(void);
void key_scan();
void ds1302_init();
void ds1302_read();
void time1();
void time2();
void time3();
void time4();
void time1_1();
unsigned char ds18b02_get();
void main(){
allinit();
ds1302_init();
Timer0Init();
Timer1Init();
EA=1;ET0=1;ET1=1;
yi=10;er=10;san=10;si=10;wu=10;liu=10;qi=10;ba=10;
while(1){
wendu=ds18b02_get();
ds1302_read();
key_scan();
//时钟显示页面
if(flag_yemian==0){
//进行时钟的换算
time_result[2]=time[2]+time_temp[2];
time_result[1]=time[1]+time_temp[1];
time_result[0]=time[0]+time_temp[0];
//进行判断,是否在边界。
time1_1();
//时钟显示
//正常
if(flag_set==0){
yi=time_result[2]/10;er=time_result[2]%10;san=10;si=time_result[1]/10;wu=time_result[1]%10;liu=10;qi=time_result[0]/10;ba=time_result[0]%10;
}
//设置时
else if(flag_set==1){
if(count==0){
yi=time_result[2]/10;er=time_result[2]%10;san=10;si=time_result[1]/10;wu=time_result[1]%10;liu=10;qi=time_result[0]/10;ba=time_result[0]%10;
}
else if(count==1){
yi=11;er=11;san=10;si=time_result[1]/10;wu=time_result[1]%10;liu=10;qi=time_result[0]/10;ba=time_result[0]%10;
}
}
//设置分
else