📄 main.c
字号:
/*
实验十五:
DS1302时钟实险,LCD1602显示。
1、设置和读取DS1302内部时钟,并通过LCD1602显示。
2、内部1 M晶振,程序采用单任务方式,软件延时。
3、此实验需要有LCD1602显示屏才可以显示。
4、DS1302是产品中最常用的时钟芯片,通过本例子的学习可以学会如何使用DS1302。
5、此实验对硬件及芯片的综合知识要求比较高,所以建议大家把此实验放到后面。
此实验参照了版主tonghe的DS1302时钟程序。
AVR mega128学习板
www.iccavr.com 阿发
10:44 2007-10-16
*/
#include "iom128v.h"
#include "ds1302.h"
#include "lcd1602.h"
/*IO口初始化函数*/
void io_init(void) {
DDRA = 0xFF; /*方向输出*/
PORTA = 0xFF; /*高电平*/
DDRB = 0x00; /*方向输入*/
PORTB = 0xFF; /*打开上拉*/
DDRC = 0xFF; /*不用的IO口建议设置为输入带上拉*/
PORTC = 0x00;
DDRD = 0x00;
PORTD = 0xFF;
DDRE = 0x00;
PORTE = 0xFF;
DDRF = 0x00;
PORTF = 0xFF;
DDRG = 0x00;
PORTG = 0xFF;
}
void main(void) {
unsigned char temp;
io_init(); /*IO口初始化*/
delay_ms(200);
LCD_init(); /*LCD1602初始化*/
ds1302_init(); /*DS302初始化*/
delay_ms(10);
ds1302_write_time(); /*设置DS302时间*/
while (1) {
delay_ms(200);
ds1302_read_time(); /*读取DS302时间*/
LCD_clear(); /*清除LCD屏幕*/
temp = (time_buf[0] >> 4) + '0';
LCD_write_char(0, 0, temp);/*年*/
temp = (time_buf[0] & 0x0F) + '0';
LCD_write_char(1, 0, temp);
temp = (time_buf[1] >> 4) + '0';
LCD_write_char(2, 0, temp);
temp = (time_buf[1] & 0x0F) + '0';
LCD_write_char(3, 0, temp);
LCD_write_char(4, 0, '-');
temp = (time_buf[2] >> 4) + '0';
LCD_write_char(5, 0, temp);/*月*/
temp = (time_buf[2] & 0x0F) + '0';
LCD_write_char(6, 0, temp);
LCD_write_char(7, 0, '-');
temp = (time_buf[3] >> 4) + '0';
LCD_write_char(8, 0, temp);/*日*/
temp = (time_buf[3] & 0x0F) + '0';
LCD_write_char(9, 0, temp);
temp = (time_buf[4] >> 4) + '0';
LCD_write_char(8, 1, temp);/*时*/
temp = (time_buf[4] & 0x0F) + '0';
LCD_write_char(9, 1, temp);
LCD_write_char(10, 1, ':');
temp = (time_buf[5] >> 4) + '0';
LCD_write_char(11, 1, temp);/*分*/
temp = (time_buf[5] & 0x0F) + '0';
LCD_write_char(12, 1, temp);
LCD_write_char(13, 1, ':');
temp = (time_buf[6] >> 4) + '0';
LCD_write_char(14, 1, temp);/*秒*/
temp = (time_buf[6] & 0x0F) + '0';
LCD_write_char(15, 1, temp);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -