}
//*********************************************************************** // 从DS302读出时钟数据
//***********************************************************************
void DS1302_read_time(void) {
time_buf[1]=DS1302_read_byte(DS1302_year_add); //年 time_buf[2]=DS1302_read_byte(DS1302_month_add); //月 time_buf[3]=DS1302_read_byte(DS1302_date_add); //日 time_buf[4]=DS1302_read_byte(DS1302_hr_add); //时 time_buf[5]=DS1302_read_byte(DS1302_min_add); //分 time_buf[6]=(DS1302_read_byte(DS1302_sec_add))&0x7F; //秒 time_buf[7]=DS1302_read_byte(DS1302_day_add); //周 }
//*********************************************************************** // DS302初始化函数
//*********************************************************************** void DS1302_init(void) {
RESET_CLR; //RESET脚置低 SCK_CLR; //SCK脚置低 RESET_OUT; //RESET脚设置为输出 SCK_OUT; //SCK脚设置为输出 }
//*********************************************************************** // 显示屏命令写入函数
//*********************************************************************** void LCD_write_com(unsigned char com) {
RS_CLR; RW_CLR; EN_SET;
DataPort = com; delay_ms(5); EN_CLR; }
//*********************************************************************** // 显示屏数据写入函数
//***********************************************************************
void LCD_write_data(unsigned char data) {
RS_SET; RW_CLR; EN_SET;
DataPort = data; delay_ms(5); EN_CLR; }
//*********************************************************************** // 显示屏清空显示
//***********************************************************************
void LCD_clear(void) {
LCD_write_com(0x01); delay_ms(5); }
//*********************************************************************** //函数名称:DisplayCgrom(uchar hz)显示CGROM里的汉字
//*********************************************************************** void DisplayCgrom(uchar addr,uchar *hz) {
LCD_write_com(addr); delay_ms(5); while(*hz != '\\0') {
LCD_write_data(*hz); hz++;
delay_ms(5); } }
//*********************************************************************** // 显示屏初始化函数
//*********************************************************************** void LCD_init(void) {
LCD_write_com(FUN_MODE); //显示模式设置 delay_ms(5);
LCD_write_com(FUN_MODE); //显示模式设置
delay_ms(5);
LCD_write_com(DISPLAY_ON); //显示开 delay_ms(5);
LCD_write_com(CLEAR_SCREEN); //清屏 delay_ms(5); }
//**************************************************************** // Display()显示测试结果
//**************************************************************** void Display(void) {
DisplayCgrom(0x81,\实时时钟演示\}
//*********************************************************************** // 主程序
//*********************************************************************** int main(void) {
volatile uchar temp;
WDT_Init(); //看门狗设置 Clock_Init(); //系统时钟设置
Port_Init(); //系统初始化,设置IO口属性
Close_LED(); //关闭LED数码管,避免显示乱码 delay_ms(100); //延时100ms
LCD_init(); //液晶参数初始化设置 LCD_clear(); //清屏
DS1302_init(); //DS1302初始化 delay_ms(10);
DS1302_write_time(); //向DS1302写初始数据,如年月和时间等 Display(); while(1) {
delay_ms(200);
DS1302_read_time(); //读DS1302数据
LCD_write_com(0x88); delay_ms(2);
temp = (time_buf[0] >> 4) + '0'; //在LCD上写要显示的数据 LCD_write_data(temp);
delay_ms(2);
temp = (time_buf[0] & 0x0F) + '0'; LCD_write_data(temp); delay_ms(2);
temp = (time_buf[1] >> 4) + '0'; LCD_write_data(temp); delay_ms(2);
temp = (time_buf[1] & 0x0F) + '0'; LCD_write_data(temp); delay_ms(2);
LCD_write_data('-'); delay_ms(2);
temp = (time_buf[2] >> 4) + '0'; LCD_write_data(temp); delay_ms(2);
temp = (time_buf[2] & 0x0F) + '0'; LCD_write_data(temp); delay_ms(2);
LCD_write_data('-'); delay_ms(2);
temp = (time_buf[3] >> 4) + '0'; LCD_write_data(temp); delay_ms(2);
temp = (time_buf[3] & 0x0F) + '0'; LCD_write_data(temp); delay_ms(2);
LCD_write_com(0x9C); delay_ms(5);
temp = (time_buf[4] >> 4) + '0'; LCD_write_data(temp); delay_ms(2);
temp = (time_buf[4] & 0x0F) + '0'; LCD_write_data(temp); delay_ms(2);
LCD_write_data(':'); delay_ms(2);
temp = (time_buf[5] >> 4) + '0'; LCD_write_data(temp); delay_ms(2);
temp = (time_buf[5] & 0x0F) + '0'; LCD_write_data(temp); delay_ms(2);
LCD_write_data(':'); delay_ms(2);
temp = (time_buf[6] >> 4) + '0'; LCD_write_data(temp); delay_ms(2);
temp = (time_buf[6] & 0x0F) + '0'; LCD_write_data(temp); delay_ms(2); } }
11、DS1302-DS1302实时时钟在1602液晶中显示测试程序
/******************************************************************** //DM430-A型开发板实时时钟DS1302控制程序,显示年月日及时间
//显示器件为1602液晶,第一行显示年月日,第二行显示时间,星期信息未显示
//由于开发板默认没有带电池,因此断电后,时间信息会丢失,初始化时间通过time_buf设置
//如果需要在断电情况下保证走时,请买一颗电池安装在主板的电池座里,电池型号1220 //初始化时间设置数据为BCD码形式
//安装电池为保证每次上电不被初始化,请先下载含DS1302_write_time()函数的程序
//再下载不含DS1302_write_time()的程序,避免每次单片机上电被初始化,也可以通过设置函数实现
********************************************************************/ #include
/*定义初始时间,BCD码格式,下面时间2010-01-14,09:55:00,星期二*/ unsigned char time_buf[8] = {0x20,0x10,0x01,0x14,0x09,0x55,0x00,0x02};
//************************************************************************* // 初始化IO口子程序
//************************************************************************* void Port_Init() {
LED8SEL = 0x00; //设置IO口为普通I/O模式,此句可省 LED8DIR = 0xFF; //设置IO口方向为输出 LED8PORT = 0xFF; //P2口初始设置为FF
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库MSP430x14x系列单片机程序实例(8)在线全文阅读。
相关推荐: