📄 lcd显示时钟.c
字号:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.9 Standard
Automatic Program Generator
?Copyright 1998-2008 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 2009-2-28
Author : WangHui
Company : HoHai University
Comments:
Chip type : ATmega16L
Program type : Application
Clock frequency : 4.000000 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega16.h>
#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 + -