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

📄 ds1302.c

📁 1602液晶显示模块
💻 C
字号:
//ICC-AVR 修改日期: 2006-10-29 15:38:44
//姓名:荣俊齐
// Target : M8
// Crystal: 1.0000Mhz

#include <iom8v.h>
#include <macros.h>
#include "ds1302.h"
#include "DELAY.C"
const char SEG_table[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
char  Sec_buffer[4]={0,0,0,0};
char  Min_buffer[4]={0,0,0,0};

/******************************************************************************
                        定义164的时钟和数据线
********************************************************************************/
#define DATA_1  PORTD|=(1<<0)
#define DATA_0  PORTD&=~(1<<0)
#define CLK_1  PORTD|=(1<<1)
#define CLK_0  PORTD&=~(1<<1)
/******************************************************************************
                        定义数码管的选择端口
********************************************************************************/
#define LED1  PORTD=0X07//LED2
#define LED2  PORTD=0X0B//LED1
#define LED3  PORTD=0X13//LED3
#define LED4  PORTD=0X23//LED4
#define LED0  PORTD=0X03//灭

/*******************************************************************************
                             单片机初始化程序

******************************************************************************/
void port_init(void)
{
 PORTB = 0x00;
 DDRB  = 0x00;
 PORTC = 0x00; //m103 output only
 DDRC  = 0xff;
 PORTD = 0x00;
 DDRD  = 0xFF;
}

//TIMER1 initialize - prescale:1
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1mSec
// actual value:  1.000mSec (0.0%)
void timer1_init(void)
{
 TCCR1B = 0x00; //stop
 TCNT1H = 0xFC; //setup
 TCNT1L = 0x18;
 OCR1AH = 0x03;
 OCR1AL = 0xE8;
 OCR1BH = 0x03;
 OCR1BL = 0xE8;
 ICR1H  = 0x03;
 ICR1L  = 0xE8;
 TCCR1A = 0x00;
 TCCR1B = 0x01; //start Timer
}


void init_devices(void)
{
 CLI(); //disable all interrupts
 port_init();
 timer1_init();
 MCUCR = 0x00;
 GICR  = 0x00;
 TIMSK = 0x04; 
 SEI(); //re-enable interrupts

}
/*******************************************************************************
                             显示程序

******************************************************************************/
/*发送显示一个字节*/
void sendbeyt(char x)
{
  int i;
  for(i=0;i<8;i++)
 {
    CLK_1;
   if(x&(1<<i))
      DATA_1;  
   else 
     DATA_0;
  CLK_0;
 }
  CLK_1;
}

/* 发送显示4字节*/
void sendFOURbeyt()
{ LED3;
  sendbeyt(SEG_table[Sec_buffer[0]]);
  delay_nus(200);
    LED4;
	sendbeyt(SEG_table[Sec_buffer[1]]);
     delay_nus(200);
	LED1;
    sendbeyt(SEG_table[Min_buffer[0]]);
    delay_nus(200);
    LED2;
	sendbeyt(SEG_table[Min_buffer[1]]);
    delay_nus(200);
  LED0;
   delay_nus(200);
 }
/*******************************************************************************
                             中断送显程序

******************************************************************************/ 
#pragma interrupt_handler timer1_ovf_isr:9
void timer1_ovf_isr(void)
{
 sendFOURbeyt();
 //TIMER1 has overflowed
 TCNT1H = 0xFC; //reload counter high value
 TCNT1L = 0x18; //reload counter low value
}
/******************************************************************************
                        BCD分解为数组元素
***************************************************************************/
void BINtoArray(char *p,unsigned int count)
 {   unsigned char i,temp;
     CLI();
	 for(i=0;i<4;i++)
	 {
	   temp=count%10;
	   *p=temp;
	   count=count/10;
           p++;
	  }
    SEI();
 } 

void main()
{char CO=0;
init_devices();
DS1302_WriteTime();   //时间校准
while(1)
 { 
  DS1302_ReadTime();
  BINtoArray(Sec_buffer,second);
  BINtoArray(Min_buffer,date);
  delay_nus(1);
 }
}

⌨️ 快捷键说明

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