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

📄 lcd显示时钟.c~

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