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

📄 main.i

📁 和泰公司的实时时钟RTC IC HT1381的读写程序,使用的是AVR 的M16.
💻 I
📖 第 1 页 / 共 2 页
字号:
// CodeVisionAVR C Compiler
// (C) 1998-2001 Pavel Haiduc, HP InfoTech S.R.L.

// I/O registers definitions for the ATmega16


#pragma used+
#pragma used+
sfrb TWBR=0;
sfrb TWSR=1;
sfrb TWAR=2;
sfrb TWDR=3;
sfrb ADCL=4;
sfrb ADCH=5;
sfrw ADCW=4;      // 16 bit access
sfrb ADCSRA=6;
sfrb ADMUX=7;
sfrb ACSR=8;
sfrb UBRRL=9;
sfrb UCSRB=0xa;
sfrb UCSRA=0xb;
sfrb UDR=0xc;
sfrb SPCR=0xd;
sfrb SPSR=0xe;
sfrb SPDR=0xf;
sfrb PIND=0x10;
sfrb DDRD=0x11;
sfrb PORTD=0x12;
sfrb PINC=0x13;
sfrb DDRC=0x14;
sfrb PORTC=0x15;
sfrb PINB=0x16;
sfrb DDRB=0x17;
sfrb PORTB=0x18;
sfrb PINA=0x19;
sfrb DDRA=0x1a;
sfrb PORTA=0x1b;
sfrb EECR=0x1c;
sfrb EEDR=0x1d;
sfrb EEARL=0x1e;
sfrb EEARH=0x1f;
sfrw EEAR=0x1e;   // 16 bit access
sfrb UBRRH=0x20;
sfrb UCSRC=0X20;
sfrb WDTCR=0x21;
sfrb ASSR=0x22;
sfrb OCR2=0x23;
sfrb TCNT2=0x24;
sfrb TCCR2=0x25;
sfrb ICR1L=0x26;
sfrb ICR1H=0x27;
sfrb OCR1BL=0x28;
sfrb OCR1BH=0x29;
sfrw OCR1B=0x28;  // 16 bit access
sfrb OCR1AL=0x2a;
sfrb OCR1AH=0x2b;
sfrw OCR1A=0x2a;  // 16 bit access
sfrb TCNT1L=0x2c;
sfrb TCNT1H=0x2d;
sfrw TCNT1=0x2c;  // 16 bit access
sfrb TCCR1B=0x2e;
sfrb TCCR1A=0x2f;
sfrb SFIOR=0x30;
sfrb OSCCAL=0x31;
sfrb OCDR=0x31;
sfrb TCNT0=0x32;
sfrb TCCR0=0x33;
sfrb MCUCSR=0x34;
sfrb MCUCR=0x35;
sfrb TWCR=0x36;
sfrb SPMCR=0x37;
sfrb TIFR=0x38;
sfrb TIMSK=0x39;
sfrb GIFR=0x3a;
sfrb GICR=0x3b;
sfrb OCR0=0X3c;
sfrb SPL=0x3d;
sfrb SPH=0x3e;
sfrb SREG=0x3f;
#pragma used-

// Interrupt vectors definitions


// Needed by the power management functions (sleep.h)
#asm
	#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
#endasm


// CodeVisionAVR C Compiler
// (C) 1998-2000 Pavel Haiduc, HP InfoTech S.R.L.


#pragma used+
#pragma used+

void delay_us(unsigned int n);
void delay_ms(unsigned int n);

#pragma used-





flash unsigned char tab_char[64][8]=
flash unsigned char tab_char[64][8]=
flash unsigned char tab_char[64][8]=
{
{0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00},/*"0", 0*/
{0x00,0x10,0x1c,0x10,0x10,0x10,0x3c,0x00},/*"1", 1*/
{0x00,0x3C,0x42,0x60,0x1C,0x02,0x7E,0x00},/*"2", 2*/
{0x00,0x3C,0x42,0x38,0x40,0x42,0x3C,0x00},/*"3", 3*/
{0x00,0x30,0x2C,0x22,0x7e,0x20,0x20,0x00},/*"4", 4*/
{0x00,0x7C,0x04,0x3c,0x40,0x40,0x3C,0x00},/*"5", 5*/
{0x00,0x3C,0x02,0x3E,0x42,0x42,0x3C,0x00},/*"6", 6*/
{0x00,0x7E,0x20,0x10,0x08,0x08,0x08,0x00},/*"7", 7*/
{0x00,0x3C,0x42,0x3C,0x42,0x42,0x3C,0x00},/*"8", 8*/
{0x00,0x3c,0x42,0x42,0x7C,0x40,0x3e,0x00},/*"9", 9*/ 
  
{0x00,0x00,0x3E,0x40,0x7C,0x42,0xFC,0x00},/*"a", 10*/
{0x00,0x02,0x02,0x3E,0x42,0x42,0x3E,0x00},/*"b", 11*/
{0x00,0x00,0x7C,0x02,0x02,0x02,0x7C,0x00},/*"c", 12*/
{0x00,0x40,0x40,0x7C,0x42,0x42,0x7C,0x00},/*"d", 13*/
{0x00,0x00,0x3C,0x42,0x7E,0x02,0x7C,0x00},/*"e", 14*/
{0x00,0x38,0x08,0x3C,0x08,0x08,0x08,0x00},/*"f", 15*/
{0x00,0x00,0x00,0x5C,0x62,0x42,0x7C,0x3E},/*"g", 16*/
{0x00,0x02,0x02,0x7E,0x42,0x42,0x42,0x00},/*"h", 17*/
{0x00,0x10,0x00,0x10,0x10,0x10,0x10,0x00},/*"i", 18*/
{0x00,0x00,0x00,0x5C,0x62,0x42,0x7C,0x3E},/*"g", 19*/
{0x00,0x02,0x22,0x12,0x0E,0x12,0x22,0x00},/*"k", 20*/
{0x00,0x10,0x10,0x10,0x10,0x10,0x10,0x00},/*"l", 21*/
{0x00,0x00,0x00,0x7E,0x52,0x52,0x52,0x00},/*"m", 22*/
{0x00,0x00,0x00,0x7E,0x42,0x42,0x42,0x00},/*"n", 23*/
{0x00,0x00,0x00,0x3C,0x42,0x42,0x3C,0x00},/*"o", 24*/
{0x00,0x00,0x00,0x3E,0x42,0x42,0x3E,0x02},/*"p", 25*/
{0x00,0x00,0x00,0x7C,0x42,0x42,0x7C,0x40},/*"q", 26*/
{0x00,0x00,0x04,0x3C,0x0C,0x04,0x04,0x00},/*"r", 27*/
{0x00,0x00,0x3C,0x02,0x3E,0x40,0x3E,0x00},/*"s", 28*/
{0x00,0x00,0x08,0x3C,0x08,0x08,0x38,0x00},/*"t", 29*/
{0x00,0x00,0x00,0x42,0x42,0x42,0x7E,0x00},/*"u", 30*/
{0x00,0x00,0x00,0x42,0x24,0x14,0x18,0x00},/*"v", 31*/
{0x00,0x00,0x00,0x99,0x59,0x66,0x66,0x00},/*"w", 32*/
{0x00,0x00,0x00,0x7E,0x3E,0x40,0x3E,0x00},/*"s", 33*/
{0x00,0x00,0x00,0x42,0x24,0x14,0x08,0x0E},/*"y", 34*/
{0x00,0x00,0x00,0x7E,0x10,0x0C,0x7E,0x00},/*"z", 35*/ 

{0x00,0x18,0x18,0x24,0x7E,0x42,0x81,0x00},/*"A", 36*/
{0x00,0x3E,0x42,0x3E,0x42,0x82,0x7E,0x00},/*"B", 37*/
{0x00,0x3C,0x46,0x02,0x02,0x86,0x7C,0x00},/*"C", 38*/
{0x00,0x3E,0x62,0x42,0x42,0x62,0x3E,0x00},/*"D", 39*/
{0x00,0x7E,0x02,0x7E,0x02,0x02,0x7E,0x00},/*"E", 40*/
{0x00,0x7E,0x02,0x7E,0x02,0x02,0x02,0x00},/*"F", 41*/
{0x00,0x3C,0x46,0x02,0x72,0x46,0x7C,0x00},/*"G", 42*/
{0x00,0x42,0x42,0x7E,0x42,0x42,0x42,0x00},/*"H", 43*/
{0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00},/*"I", 44*/
{0x00,0x3C,0x46,0x02,0x72,0x46,0x7C,0x00},/*"G", 45*/
{0x00,0x62,0x12,0x0A,0x16,0x22,0x42,0x00},/*"K", 46*/
{0x00,0x02,0x02,0x02,0x02,0x02,0x7E,0x00},/*"L", 47*/
{0x00,0x66,0x66,0x66,0x5A,0x5A,0x5A,0x00},/*"M", 48*/
{0x00,0x46,0x46,0x4A,0x52,0x62,0x62,0x00},/*"N", 49*/
{0x00,0x3C,0x66,0x42,0x42,0x66,0x3C,0x00},/*"O", 50*/
{0x00,0x3E,0x42,0x42,0x3E,0x02,0x02,0x00},/*"P", 51*/
{0x00,0x3C,0x66,0x42,0x42,0x56,0x3C,0x40},/*"Q", 52*/
{0x00,0x3E,0x42,0x7E,0x42,0x42,0x42,0x00},/*"R", 53*/
{0x00,0x7C,0x02,0x3C,0x40,0x82,0x7C,0x00},/*"S", 54*/
{0x00,0x7F,0x08,0x08,0x08,0x08,0x08,0x00},/*"T", 55*/
{0x00,0x42,0x42,0x42,0x42,0x42,0x3C,0x00},/*"U", 56*/
{0x00,0x81,0x42,0x22,0x24,0x1C,0x08,0x00},/*"V", 57*/
{0x00,0x81,0x5A,0x5A,0x5A,0x24,0x24,0x00},/*"W", 58*/
{0x00,0x22,0x14,0x08,0x1C,0x26,0x43,0x00},/*"X", 59*/
{0x00,0x43,0x26,0x1C,0x08,0x08,0x08,0x00},/*"Y", 60*/
{0x00,0x7F,0x20,0x18,0x04,0x02,0x7F,0x00},/*"Z", 61*/
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}, /*"nop", 62*/ 
{0x00,0x00,0x00,0x00,0x7e,0x00,0x00,0x00}/*"-",63*/
};
void written_add_data(unsigned int temp_add,unsigned char temp_data)
void written_add_data(unsigned int temp_add,unsigned char temp_data)
{ 
 unsigned char temp;

    PORTB.5    =0;
    PORTB.1    =0; 
  
    PORTB.2    =0; 
    temp=(unsigned char)(temp_add>>8);
    PORTC=temp;      
    PORTB.2    =1; 
      
    PORTB.2    =0; 
    temp=(unsigned char)(temp_add);
    PORTC=temp;    
    PORTB.2    =1; 
                  
    PORTB.1    =1;        
   
    PORTB.2    =0; 
    PORTC=temp_data;    
    PORTB.2    =1;                                 
}

 void written(unsigned char temp_1)
{  
   PORTB.2    =0; 
   PORTC=temp_1;  
   PORTB.2    =1;
}   

  
/*
 void inintially(void)   //初始化LCD
{ 
  written_add_data(0x500,0x7a);
  delay_ms(10);
  written_add_data(0x501,0xb7);
 delay_ms(10);
  written_add_data(0x502,0x06);
}  
*/

void Lcd_inint(void)   //初始化LCD
{ 
  written_add_data(0x500,0xe8);
  written(0xa6);
  written(0x04);
}  

void display_clear(void)    //清除所有显示
{       
  unsigned char i;
       for(i=0;i<16;i++)
         {
          written_add_data((unsigned int)i*16,0x0);
          written(0x0);
         }  
           
       for(i=0;i<16;i++)
         {
          written_add_data((unsigned int)i*16+2,0x0);
          written(0x0);
         } 
         
       for(i=0;i<16;i++)
         {
          written_add_data((unsigned int)i*16+4,0x0);
          written(0x0);
         } 
         
       for(i=0;i<16;i++)
         {
          written_add_data((unsigned int)i*16+256,0x0);
          written(0x0);
         }  
         
       for(i=0;i<16;i++)
         {
          written_add_data((unsigned int)i*16+258,0x0);
          written(0x0);
         } 
         
       for(i=0;i<16;i++)
         {
          written_add_data((unsigned int)i*16+260,0x0);
          written( 0x0);
         }         
}    
   
void Written_char(unsigned char line,unsigned char row,unsigned char z)
{   
  unsigned char i;
if(row<6)
  { 
    switch(line)
     {
      case 0: 
        for(i=0;i<8;i++) written_add_data((unsigned int)i*16+row,tab_char[z][i]);
        break;  
      case 1: 
        for(i=8;i<16;i++) written_add_data((unsigned int)i*16+row,tab_char[z][i-8]);
        break;
      }
   }
else 
  { 
    switch(line)
     {
      case 0: 
        for(i=0;i<8;i++) written_add_data((unsigned int)i*16+row+250,tab_char[z][i]);
        break;        
      case 1: 
        for(i=8;i<16;i++) written_add_data((unsigned int)i*16+row+250,tab_char[z][i-8]);
        break;
      }
   }
}

/*void Written_char_back(unsigned char line,unsigned char row,unsigned char z)
{   
  unsigned char i;
if(row<6)
  { 
    switch(line)
     {
      case 0: 
        for(i=0;i<8;i++) written_add_data((unsigned int)i*16+row,~(tab_char[z][i]));
        break;  
      case 1: 
        for(i=8;i<16;i++) written_add_data((unsigned int)i*16+row,~(tab_char[z][i-8]));
        break;
      }
   }
else 
  { 
    switch(line)
     {
      case 0: 
        for(i=0;i<8;i++) written_add_data((unsigned int)i*16+row+250,~(tab_char[z][i]));
        break;        
      case 1: 
        for(i=8;i<16;i++) written_add_data((unsigned int)i*16+row+250,~(tab_char[z][i-8]));
        break;
      }
   }
}   */ 

/*复位脚*/    

/*双向数据*/

/*时钟信号*/

//#define HT1381_charger_add		0x90 		//适用于ds1302			 

//unsigned char time_buf[8] = {0x20,0x07,0x05,0x08,0x23,0x59,0x00,0x02};
unsigned char time_buf[7];
unsigned char time_buf[7];


/*向HT1381写入一字节数据*/
void HT1381_write_byte(unsigned char addr, unsigned char written_data) 
{
	unsigned char i;
	PORTD |= (1 << (0))     ;		/*启动HT1381总线*/
	
	/*写入目标地址:addr*/
	DDRD |= (1 << (1))      ;
	addr = addr & 0xFE;    /*最低位置零*/
	for (i = 0; i < 8; i ++) 
	   {
	    if (addr & 0x01) 
		{PORTD |= (1 << (1))     ;}
	    else {PORTD &= ~((1 << (1)))  ;}
		PORTD |= (1 << (2))     ;
		PORTD &= ~((1 << (2)))  ;
		addr = addr >> 1;
	      }
	
	/*写入数据:written_data*/
	DDRD |= (1 << (1))      ;
	for (i = 0; i < 8; i ++) 
	    {
	    if (written_data & 0x01)
	        {PORTD |= (1 << (1))     ;}
	     else {PORTD &= ~((1 << (1)))  ;}
		PORTD |= (1 << (2))     ;
		PORTD &= ~((1 << (2)))  ;
		written_data = written_data >> 1;
		}
	PORTD &= ~((1 << (0)))  ;					/*停止HT1381总线*/
}

/*从HT1381读出一字节数据*/
unsigned char HT1381_read_byte(unsigned char addr) 
{
	unsigned char i;
	unsigned char temp;
	PORTD |= (1 << (0))     ;					/*启动HT1381总线*/

	/*写入目标地址:addr*/
	DDRD |= (1 << (1))      ;
	addr = addr | 0x01;/*最低位置高*/
	for (i = 0; i < 8; i ++) 
	   {
	     if (addr & 0x01) {PORTD |= (1 << (1))     ;}
	     else { PORTD &= ~((1 << (1)))  ;}
	     PORTD |= (1 << (2))     ;
	     PORTD &= ~((1 << (2)))  ;
	     addr = addr >> 1;
	   }
	
	/*输出数据:temp*/
	DDRD &= ~((1 << (1)))   ;
	for (i = 0; i < 8; i ++) 
	   {
		temp = temp >> 1;
		if (PIND & (1 << (1))       ) 
		  {temp |= 0x80;}
		else {temp &= 0x7F;}
		PORTD |= (1 << (2))     ;
		PORTD &= ~((1 << (2)))  ;
	    }
	PORTD &= ~((1 << (0)))  ;					/*停止HT1381总线*/
	return temp;
}

/*向HT1381写入时钟数据*/
/*void HT1381_write_time(void) 
{
	HT1381_write_byte(HT1381_control_add,0x00);		//关闭写保护 
	HT1381_write_byte(HT1381_sec_add,0x80);			//暂停 
	//HT1381_write_byte(HT1381_charger_add,0xa9);		//涓流充电 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -