📄 lcd显示时钟.c~
字号:
/*********************************************
File name :
Chip type : ATmega16
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*********************************************/
#include <mega16.h>
#ifndef __SLEEP_DEFINED__
#define __SLEEP_DEFINED__
.EQU __se_bit=0x40
.EQU __sm_mask=0xB0
.EQU __sm_powerdown=0x20
.EQU __sm_powersave=0x30
.EQU __sm_standby=0xA0
.EQU __sm_ext_standby=0xB0
.EQU __sm_adc_noise_red=0x10
.SET power_ctrl_reg=mcucr
#endif
#include <delay.h>
#include <stdio.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
unsigned char time[3]; // 时、分、秒计数
unsigned char time_counter; // 1秒计数器
unsigned char lcd_buffer[33]; //定义缓冲区
void display(void) // 扫描显示函数
{
sprintf(lcd_buffer,"Now Time is:\n %02d:%02d:%02d",time[2],time[1],time[0]); //显示时间
lcd_gotoxy(0,0); //定位到第1行第1列
lcd_puts(lcd_buffer); //覆盖前一次的时间,这样就避免屏幕闪烁
delay_ms(23); //延时23ms
}
void main(void)
{
lcd_init(16); //初始化LCD
lcd_clear(); //清空LCD
PORTA=0x3F; // PORTA初始化
DDRA=0xFC;
time[2] = 23; time[1] = 59; time[0] = 50; // 时间初值23:59:50 .这样可以看到各位的进位情况
while (1)
{
display(); // 显示扫描,执行时间12ms
if (++time_counter >= 40) //如果计数器大于等于40,时间增加1秒
{
time_counter = 0; //计数器清零
if (++time[0] >= 60) //秒位大于等于60,则秒位清零
{
time[0] = 0;
if (++time[1] >= 60) //分位大于等于60,则分位清零
{
time[1] = 0;
if (++time[2] >= 24) time[2] = 0; //时位大于等于24,则时位清零
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -