这是干嘛的 void main() { init_eeprom(); //开始初始化保存的数据 P1=0xff; // delay(2000); lcd_init(); //调用液晶屏初始化子函数 ds1302_init(); //调用DS1302时钟的初始化子函数 init(); //调用定时计数器的设置子函数 led1=0; //打开LCD的背光电源 buzzer=0; //蜂鸣器长响一次 delay(100); buzzer=1; init_eeprom(); while(1) //无限循环下面的语句: { keyscan(); //调用键盘扫描子函数 led=led1; if(timerOn==1) alarm(); //闹钟输出 if((fen==0)&&(miao==0)) { if(shi>12) temp_hour=shi-12; else { if(shi==0) temp_hour=12; else temp_hour=shi; } shangyimiao=miao; baoshi=1; } if(baoshi==1) { ZD_baoshi(); do keyscan(); while(shangyimiao==miao); shangyimiao=miao; } } }
时间: 2024-04-22 22:25:54 浏览: 12
这是一个基于单片机的时钟闹钟程序的主函数。主要包括以下几个部分:
1. 初始化:对EEPROM、LCD、DS1302时钟、定时计数器等进行初始化。
2. 执行键盘扫描子函数,读取按键的输入状态。
3. 控制LED灯的亮灭状态。
4. 如果闹钟定时器的标志位timerOn为1,则触发闹钟输出。
5. 如果当前时间到了整小时,触发蜂鸣器发声和计数器计数。
6. 在上一步中,如果计数器达到预设值,则清零计数器和蜂鸣器标志位,停止蜂鸣声。
7. 无限循环以上步骤,保持程序运行。
需要注意的是,在程序的一些部分中,还有一些其他的功能实现,比如读取当前时间并在LCD上显示出来、设置闹钟时间等等。
相关问题
翻译这段代码 void main() { init_eeprom(); //开始初始化保存的数据 P1=0xff; // delay(2000); lcd_init(); //调用液晶屏初始化子函数 ds1302_init(); //调用DS1302时钟的初始化子函数 init(); //调用定时计数器的设置子函数 led1=0; //打开LCD的背光电源 buzzer=0; //蜂鸣器长响一次 delay(100); buzzer=1; init_eeprom(); while(1) //无限循环下面的语句: { keyscan(); //调用键盘扫描子函数 led=led1; if(timerOn==1) alarm(); //闹钟输出 if((fen==0)&&(miao==0)) { if(shi>12) temp_hour=shi-12; else { if(shi==0) temp_hour=12; else temp_hour=shi; } shangyimiao=miao; baoshi=1; } if(baoshi==1) { ZD_baoshi(); do keyscan(); while(shangyimiao==miao); shangyimiao=miao; } } }
void main() {
init_eeprom(); // 初始化保存的数据
P1 = 0xff; // 延时 2000 毫秒
//delay(2000);
lcd_init(); // 调用液晶屏初始化子函数
ds1302_init(); // 调用 DS1302 时钟的初始化子函数
init(); // 调用定时计数器的设置子函数
led1 = 0; // 打开 LCD 的背光电源
buzzer = 0; // 蜂鸣器长响一次
delay(100);
buzzer = 1;
init_eeprom();
while (1) { // 无限循环下面的语句
keyscan(); // 调用键盘扫描子函数
led = led1;
if (timerOn == 1)
alarm(); // 闹钟输出
if ((fen == 0) && (miao == 0)) {
if (shi > 12)
temp_hour = shi - 12;
else {
if (shi == 0)
temp_hour = 12;
else
temp_hour = shi;
}
shangyimiao = miao;
baoshi = 1;
}
if (baoshi == 1) {
ZD_baoshi();
do keyscan();
while (shangyimiao == miao);
shangyimiao = miao;
}
}
}
以上是一段 C 语言的代码,大致功能是一个时钟程序,具体实现细节需要结合具体的硬件和外设来看。代码中主要包括以下几个部分:
1. 初始化:包括初始化 EEPROM、液晶屏、DS1302 时钟以及定时计数器等。
2. 执行循环:不断执行键盘扫描子函数,根据扫描到的键值进行操作,同时根据时间进行闹钟的输出和报时功能的实现。
在循环中,代码中还包括了一些变量和函数的调用,具体实现需要结合具体的硬件和外设来看。
u16 zhankongbi=0; void Timer0_Init(void) //100微秒@12.000MHz { TMOD &= 0xF0; //设置定时器模式 TMOD |= 0x01; //设置定时器模式 TL0 = 0x9C; //设置定时初始值 TH0 = 0xFF; //设置定时初始值 TF0 = 0; //清除TF0标志 TR0 = 1; //定时器0开始计时 ET0 = 1; //使能定时器0中断 EA=1; } void Timer0_Isr(void) interrupt 1 { TL0 = 0x9C; //设置定时初始值 TH0 = 0xFF; //设置定时初始值 temer0++; if(temer0<=zhankongbi){ P1=1; }else{ P1=0; // 10s 1.5 } if(temer0>=200) temer0=0;
这段代码是关于定时器0的初始化和中断处理函数的代码。在初始化函数Timer0_Init()中,首先设置了定时器模式为模式1,然后设置了定时器的初始值,TL0为0x9C,TH0为0xFF。接着清除了TF0标志位,并使能了定时器0中断和总中断。在中断处理函数Timer0_Isr()中,首先重新设置了定时器的初始值,然后每次进入中断都会对temer0进行递增操作。如果temer0小于等于zhankongbi的值,就将P1口置为高电平;否则将P1口置为低电平。最后,当temer0大于等于200时,将temer0重置为0。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)