⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcd显示时钟.c

📁 CVAVR语言 定时计数器控制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 + -