P4SEL = 0x00;
P4DIR = 0xFF; //数据口输出模式 P5SEL = 0x00;
P5DIR|= BIT5 + BIT6 + BIT7; //1602液晶控制口设置为输出模式 }
//*********************************************************************** //向DS1302写入一字节数据
//*********************************************************************** void DS1302_write_byte(unsigned char addr, unsigned char d) {
unsigned char i;
RESET_SET;
/*写入目标地址:addr*/ IO_OUT;
//启动DS1302总
addr = addr & 0xFE; //最低位置零 for (i = 0; i < 8; i ++) { if (addr & 0x01) {
IO_SET; } else {
IO_CLR; }
SCK_SET; SCK_CLR;
addr = addr >> 1; }
/*写入数据:d*/ IO_OUT;
for (i = 0; i < 8; i ++) {
if (d & 0x01) {
IO_SET; } else {
IO_CLR; }
SCK_SET;
SCK_CLR; d = d >> 1; }
RESET_CLR; //停止DS1302总线 }
//*********************************************************************** // 从DS1302读出一字节数据
//*********************************************************************** unsigned char DS1302_read_byte(unsigned char addr) {
unsigned char i; unsigned char temp;
RESET_SET; /*写入目标地址:addr*/ IO_OUT;
addr = addr | 0x01; for (i = 0; i < 8; i ++) {
if (addr & 0x01) {
IO_SET; } else {
IO_CLR; }
SCK_SET; SCK_CLR; addr = addr >> 1; }
/*输出数据:temp*/ IO_IN;
for (i = 0; i < 8; i ++) {
temp = temp >> 1; if (IO_R) {
temp |= 0x80; } else {
temp&= 0x7F; }
SCK_SET;
//启动DS1302总线 //最低位置高
SCK_CLR; }
RESET_CLR; //停止DS1302总线 return temp; }
//*********************************************************************** // 向DS302写入时钟数据
//*********************************************************************** void DS1302_write_time(void) {
DS1302_write_byte(DS1302_control_add,0x00); //关闭写保护 DS1302_write_byte(DS1302_sec_add,0x80); //暂停 //DS1302_write_byte(DS1302_charger_add,0xa9); //涓流充电 DS1302_write_byte(DS1302_year_add,time_buf[1]); //年 DS1302_write_byte(DS1302_month_add,time_buf[2]); //月 DS1302_write_byte(DS1302_date_add,time_buf[3]); //日 DS1302_write_byte(DS1302_day_add,time_buf[7]); //周 DS1302_write_byte(DS1302_hr_add,time_buf[4]); //时 DS1302_write_byte(DS1302_min_add,time_buf[5]); //分 DS1302_write_byte(DS1302_sec_add,time_buf[6]); //秒 DS1302_write_byte(DS1302_day_add,time_buf[7]); //周 DS1302_write_byte(DS1302_control_add,0x80); //打开写保护 }
//*********************************************************************** // 从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); }
//***********************************************************************
// 显示屏字符串写入函数
//***********************************************************************
void LCD_write_str(unsigned char x,unsigned char y,unsigned char *s) {
if (y == 0) {
LCD_write_com(0x80 + x); } else {
LCD_write_com(0xC0 + x); }
while (*s) {
LCD_write_data( *s); s ++; } }
//*********************************************************************** // 显示屏单字符写入函数
//*********************************************************************** void LCD_write_char(unsigned char x,unsigned char y,unsigned char data) {
if (y == 0) {
LCD_write_com(0x80 + x); } else {
LCD_write_com(0xC0 + x); }
LCD_write_data( data); }
//*********************************************************************** // 显示屏初始化函数
//*********************************************************************** void LCD_init(void) {
LCD_write_com(0x38); //显示模式设置 delay_ms(5);
LCD_write_com(0x08); //显示关闭
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库MSP430x14x系列单片机程序实例(9)在线全文阅读。
相关推荐: