您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机M16 GCC DS1302示例程序 正文
M16 GCC DS1302示例程序

M16 GCC DS1302示例程序

点击数:7796 次   录入时间:03-04 11:57:07   整理:http://www.55dianzi.com   AVR单片机
  }
 
 /*输出数据:temp*/
 IO_IN;
 for (i = 0; i < 8; i ++) {
  temp = temp >> 1;
  if (IO_R) {
   temp |= 0x80;
   }
  else {
   temp &= 0x7F;
   }
  SCK_SET;
  SCK_CLR;
  }
 
 RST_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) 
{
 
 RST_CLR;   //RST脚置低
 SCK_CLR;   //SCK脚置低
 RST_OUT;   //RST脚设置为输出
 SCK_OUT;   //SCK脚设置为输出
}

//***********************************************************************
// 显示屏命令写入函数
//***********************************************************************


void LCD_write_com(unsigned char com) 

 RS_CLR;
 RW_CLR;
 EN_SET;
 PORTB = com;
 delay_ms(5);
 EN_CLR;
}
//***********************************************************************
// 显示屏数据写入函数
//***********************************************************************

void LCD_write_data(unsigned char data) 
{
 RS_SET;
 RW_CLR;
 EN_SET;
 PORTB = 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) 
{
 DDRA = 0xFF;            //I/O口方向设置
 DDRD |= (1 << PD5) | (1 << PD6) | (1 << PD7);
 LCD_write_com(0x38);    //显示模式设置
 delay_ms(5);
 LCD_write_com(0x08);    //显示关闭
 delay_ms(5);
        LCD_write_com(0x01);    //显示清屏
 delay_ms(5);
        LCD_write_com(0x06);    //显示光标移动设置
 delay_ms(5);
 LCD_write_com(0x0C);    //显示开及光标设置
        delay_ms(5);
}
void main(void) {

 unsigned char temp;
       
 MCUCSR=MCUCSR|(1<<JTD);                //关闭JTD,即关闭JTAG功能
        MCUCSR=MCUCSR|(1<<JTD);               //因为DS1302和JTAG口共用,关闭JTAG才能使能IO功能
 PORTB = 0xFF;         //PB做数据口,电平设置
 DDRB = 0xFF;         //方向输出
 PORTC = 0xFF;                        //PC口设置
 DDRC = 0x80;
 PORTD = 0xFF;                        //液晶控制口
 DDRD = 0x00;

 delay_ms(200);
 LCD_init();                           //1602液晶初始化
 ds1302_init();                        //DS1302初始化
 delay_ms(10);
 ds1302_write_time();                 //向DS1302写初始数据,如年月和时间等

上一页  [1] [2] [3]  下一页


本文关键字:程序  AVR单片机单片机-工控设备 - AVR单片机