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

📄 bi2.c

📁 驱动320240
💻 C
📖 第 1 页 / 共 2 页
字号:
/**********************
编写者:赖行
创建时间:2006年1月
最后修改:2006年1月
用途:1602液晶在MEGEA8上的显示
接法:见图
**************************/
#include <iom16v.h>
#include <macros.h>
#inclede <eeprom.h> 

#define LCD_EN_PORT    PORTD
#define LCD_RS_PORT    PORTD
#define LCD_DATA_PORT  PORTD
#define LCD_DATA_DDR   DDRD
#define LCD_DATA_PIN   PIND
#define LCD_EN         0x10   //portB2        out
#define LCD_RS         0x40   //portB0        out
#define LCD_DATA       0x0F   //portB4/5/6/7   out
/*--------------------------------------------------------------------------------------------------
Public function prototypes
--------------------------------------------------------------------------------------------------*/
void LCD_init         (void);
void LCD_en_write     (void);
void LCD_write_char   (unsigned command,unsigned data);
void LCD_set_xy       (unsigned char x, unsigned char y);
void LCD_write_string (unsigned char X,unsigned char Y,unsigned char *s);
void delay_nus        (unsigned int n);
void delay_nms        (unsigned int n);
/*unsigned char time[0][0]=10;
unsigned char time[0][1]=55;
unsigned char time[0][2]=23;*/
unsigned char alarmfalg=1;
unsigned char mo=0;
unsigned char time[10][3]={9,5,8,0,56,10,0,0,13,0,0,12,0,0,10,0,0,11};
unsigned char change=10;

  #define DS1302_CE			4		//PB4 SS 必须设为输出 ----DS1302 pin5

//宏定义
#define EnDS1302 PORTB|= (1<<DS1302_CE)	// 置CE为高电平,使能SPI接口
#define DiDS1302 PORTB&=~(1<<DS1302_CE)	// 置CE为低电平,关闭SPI接口

//函数声明+
void init_SPI(void);			//初始化SPI接口
//unsigned char check_RTC(void);			//检测DS1302
//void init_RTC(void);			//初始化DS1302
void read_date(void);			//读取当前时间并解释
extern unsigned char date_init[8]={0x50,	//59秒
						   0x27,	//59分
						   0x3,	//23时  24小时制
						   0x15,	//06日
						   0x04,	//10月
						   0x06,	//星期四
						   0x06,	//2005年
						   0x80		//写保护,
						   };
extern unsigned char CURDATE[7];
unsigned char sCURDATE[]="                                                    ";
extern unsigned char sWEEK[];
unsigned char date;
unsigned char temp_1302[7];
//全局变量声明


   /*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void)                 //1us延时函数
  {
   asm("nop");
      asm("nop");
      asm("nop");
      asm("nop");
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }
  
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1142;i++);
  }
  
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }
   
void delay(unsigned int n)//延时n毫秒
{
  unsigned int i;
  for (i=0;i<n;i++)//执行n次1毫秒延时
  delay_1ms();
}
char change_1302(char*p)
{
	unsigned char i,j;
	j=*p&0x0F;
	i=(*p>>4)&0x0f;
	*p=i*10+j;
	return *p;

}


//初始化SPI接口
void init_SPI(void)
{
    SPCR = (1<<SPE)|(1<<MSTR)|(1<<DORD)|(1<<SPR0)|(1<<SPR1);		
// 使能SPI接口,主机模式,LSB低位在先,模式0,16分频,SPI时钟约460KHz

}
/*-----------------------------------------------------------------------
Single_SPI    : 使用SPI接口读写数据到DS1302
 
输入参数:	command:	命令选择;
			wdata:		写入的数据;
返回值		rdata:		读回的数据;	
   (SPI的收发是同时进行的)
-----------------------------------------------------------------------*/
unsigned char Single_SPI(unsigned char command,unsigned char wdata)
{
    char rdata;
    EnDS1302;							// 使能LCD
   delay_nus(10);
    SPDR = command;			 			// 传送命令到SPI寄存器
	while(!(SPSR&(1<<SPIF)))
     ;	

   delay_nus(10);
    SPDR = wdata;	
	    delay_nus(10);		 			// 传送数据到SPI寄存器
	while(!(SPSR&(1<<SPIF)))
		   ;

    rdata=SPDR;							// 读取数据
		    delay_nus(10);	
    DiDS1302;							// 关断LCD SPI通讯
    delay_nus(10);
	change_1302(& rdata);
    return rdata;
}

/*-----------------------------------------------------------------------
Burst_SPI    : 使用SPI接口读写一批数据到DS1302
 
输入参数:	CMD:		选择Clock/RAM,选择读写
			lenth:		数据长度
			pwdata:		写入数据的缓冲区;
			prdata:		读回数据的缓冲区;	
   (SPI的收发是同时进行的)
读CLOCK的数据从SECOND寄存器开始,到CONTROL寄存器,最大8字节
写CLOCK的数据必须一次写完8个字节
读写RAM的数据从 RAM0地址开始,到RAM30地址,最大31字节
-----------------------------------------------------------------------*/
void Burst_SPI(unsigned char CMD,unsigned char len,
						unsigned char *pwdata,unsigned char *prdata)
{
//unsigned char *prdata;
//*prdata=*temp[0];
    EnDS1302;								// 使能SPI通讯
    delay_nus(10);
	SPDR=CMD;								// 传送命令到SPI寄存器
    while(!(SPSR&(1<<SPIF)))
		   ;
    delay_nus(10);    
    while (len--)
    {
    	SPDR = *pwdata++;			 		// 传送数据到SPI寄存器
    	while(!(SPSR&(1<<SPIF)))
		   ;
    	*prdata++=SPDR;						// 读取数据
	};
	DiDS1302;								// 关断SPI通讯
   sCURDATE[0]=change_1302(&temp_1302[0]);
sCURDATE[1]=change_1302(&temp_1302[1]);
sCURDATE[2]=change_1302(&temp_1302[2]);
sCURDATE[3]=change_1302(&temp_1302[3]);
sCURDATE[4]=change_1302(&temp_1302[4]);
sCURDATE[5]=change_1302(&temp_1302[5]);
sCURDATE[6]=change_1302(&temp_1302[6]);
time[0][0]=sCURDATE[0];
time[0][1]=sCURDATE[1];
time[0][2]=sCURDATE[2];
}

  
  
  
  
  
  /*		 音阶常数=65536-8000000/8/2/f	  */
#define DO	64580	//523
#define RE	64684	//587
#define	MI	64777	//659
#define FA	64820	//698
#define	SO	64898	//784
#define LA	64968	//880
#define	TI	65030	//988                	                        	
#define DO_H	65058	//1046
#define RE_H	65110	//1174
#define MI_H	65157	//1318
#define FA_H	65178	//1397
#define SO_H	65217	//1568
#define LA_H	65252	//1760
#define TI_H	65283	//1976
#define DO_HH	65297	//2093

/* 		  音乐数据  	  */
/* 四分之一拍为0x10, 二分之一拍为0x20, 一拍为0x40*/
/* 低1-1 2-2 3-3 4-4 5-5 6-6 7-7 */
/* 中1-8 2-9 3-A 4-B 5-C 6-D 7-E */
/* 高1-F*/								  	
const unsigned char sound[]=
{ //乐曲数据表

					
			0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
	  		0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
			0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
			0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
			0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
			0x48,0x48,0x00,0x00
	/*					
			0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
                        0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
			0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
			0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
			0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
			0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
			0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
			0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
			0x46,0x46,0x46,0x46,
						
			0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,0x45,0x44,
	  		0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x45,0x46,0x46,
			0x46,0x45,0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,
			0x48,0x48,0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,
			0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,
			0x45,0x47,0x46,0x45,0x43,0x43,0x45,0x48,0x48,0x48,
			0x46,0x46,0x48,0x49,0x49,0x48,0x47,0x47,0x47,0x45,
			0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,
			0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,0x46,0x47,
			0x48,0x48,0x48,0x48,0x40,0x40,
						
			0x45,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x4a,
	  		0x49,0x48,0x48,0x48,0x48,0x48,0x45,0x48,0x4a,0x4a,
			0x48,0x4a,0x4c,0x4c,0x4b,0x4a,0x49,0x49,0x49,0x49,
			0x49,0x4c,0x4b,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x49,
			0x4a,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x46,0x46,0x45,
			0x45,0x45,0x47,0x48,0x49,0x49,0x4a,0x49,0x48,0x48,
    			0x48,0x48,0x48,0x48,
0x23,0x24,0x25,0x44,0x45,0x24,0x23,0x22,0x42,0x40,0x40,0x23,0x22,0x21,0x41,0x28,
0x48,0x23,0x25,0x45,0x40,0x40,0x21,0x21,0x42,0x21,0x21,0x41,0x20,0x28,0x47,0x26,
0x17,0x16,0x15,0x45,0x40,0x31,0x11,0x21,0x21,0x21,0x22,0x42,0x40,0x20,0x23,0x23,
0x24,0x25,0x24,0x23,0x24,0x25,0x26,0x23,0x23,0x42,0x42,0x40,0x23,0x22,0x21,0x41,
0x28,0x28,0x28,0x23,0x25,0x45,0x45,0x40,0x20,0x25,0x46,0x28,0x28,0x48,0x20,0x29,
0x47,0x26,0x17,0x16,0x15,0x45,0x25,0x25,0x26,0x28,0x18,0x16,0x26,0x28,0x26,0x28,
0x19,0x19,0x49,0x49,0x20,0x25,0x2a,0x18,0x19,0x29,0x28,0x16,0x17,0x16,0x15,0x25,
0x25,0x28,0x29,0x2a,0x29,0x48,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,0x2c,0x1c,0x1a,
0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,0x28,0x26,0x48,
0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x21,0x18,0x16,0x26,0x28,0x26,0x28,0x29,
0x49,0x49,0x20,0x25,0x28,0x29,0x2a,0x29,0x49,0x28,0x48,0x2c,0x4c,0x4c,0x40,0x2a,
0x2c,0x15,0x1a,0x2a,0x2a,0x29,0x4a,0x2b,0x2a,0x4a,0x4a,0x40,0x2a,0x29,0x29,0x28,
0x28,0x26,0x28,0x28,0x29,0x26,0x45,0x45,0x40,0x25,0x25,0x26,0x28,0x28,0x26,0x2a,
0x19,0x18,0x28,0x18,0x19,0x48,0x48,0x40,0x40,0x40,0x40,0x28,0x48,0x29,0x28,0x28,
0x2a,0x1a,0x1a,0x1a,0x18,0x40,0x20,0x26,0x28,0x28,0x28,0x26,0x28,0x48,0x26,0x25,
0x45,0x45,0x40,0x40,0x40,0x28,0x48,0x28,0x28,0x1c,0x1d,0x2d,0x2c,0x28,0x28,0x28,
0x20,0x26,0x19,0x1a,0x29,0x19,0x18,0x28,0x28,0x26,0x21,0x29,0x49,0x49,0x40,0x20,
0x28,0x29,0x2a,0x4a,0x4a,0x20,0x25,0x28,0x29,0x48,0x48,0x48,0x25,0x25,0x26,0x28,
0x28,0x26,0x2a,0x19,0x18,0x28,0x18,0x19,0x49,0x49,0x40,0x40,

0x25,0x28,0x2A,0x4A,0x29,0x28,0x48,0x28,        
0x26,0x46,0x28,0x45,0x25,0x28,0x2A,0x4A,
0x29,0x28,0x48,0x28,0x29,0x49,0x2A,0x49,
0x40,0x2A,0x4A,0x2B,0x4C,0x40,0x3D,0x1D,
0x2D,0x2D,0x4C,0x40,0x2A,0x4A,0x2C,0x48,
0x28,0x2A,0x29,0x46,0x25,0x48,0x40,

0x2a,0x2a,0x4a,0x2a,0x2a,0x4a,0x2a,0x2c,0x28,0x29,
0x4a,0x4a,0x2b,0x2b,0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,
0x2a,0x29,0x29,0x28,0x49,0x4c,0x2a,0x2a,0x4a,0x2a,
0x2a,0x4a,0x2a,0x2c,0x28,0x29,0x4a,0x4a,0x2b,0x2b,
0x2b,0x2b,0x2b,0x2a,0x2a,0x2a,0x2c,0x2c,0x2b,0x29,
0x48,0x48,

0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,0x46,0x46,
0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,0x4a,0x4a,
0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,0x2a,0x28,
0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,0x46,0x46,
0x46,0x46,0x4a,0x2a,0x29,0x28,0x29,0x28,0x27,0x46,
0x46,0x46,0x46,0x4b,0x2b,0x2a,0x29,0x28,0x29,0x2b,
0x4a,0x4a,0x4a,0x4b,0x2b,0x2a,0x49,0x29,0x2b,0x4a,
0x2a,0x28,0x46,0x48,0x47,0x4a,0x29,0x28,0x27,0x28,
0x46,0x46,0x46,0x46,

0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,0x45,0x44,
0x44,0x44,0x43,0x43,0x43,0x43,0x44,0x45,0x46,0x46,
0x46,0x45,0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,
0x48,0x48,0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,
0x46,0x47,0x48,0x48,0x48,0x48,0x48,0x48,0x49,0x49,
0x45,0x47,0x46,0x45,0x43,0x43,0x45,0x48,0x48,0x48,
0x46,0x46,0x48,0x49,0x49,0x48,0x47,0x47,0x47,0x45,
0x45,0x45,0x43,0x43,0x45,0x49,0x49,0x49,0x48,0x48,
0x45,0x44,0x44,0x44,0x43,0x43,0x45,0x45,0x46,0x47,
0x48,0x48,0x48,0x48,0x40,0x40,

0x45,0x48,0x4a,0x4a,0x4a,0x4a,0x4a,0x4a,0x49,0x4a,
0x49,0x48,0x48,0x48,0x48,0x48,0x45,0x48,0x4a,0x4a,
0x48,0x4a,0x4c,0x4c,0x4b,0x4a,0x49,0x49,0x49,0x49,
0x49,0x4c,0x4b,0x4a,0x4a,0x4a,0x49,0x48,0x48,0x49,
0x4a,0x4c,0x4b,0x4b,0x4b,0x4b,0x4b,0x46,0x46,0x45,
0x45,0x45,0x47,0x48,0x49,0x49,0x4a,0x49,0x48,0x48,
0x48,0x48,0x48,0x48,
						
0x00,0x00*/
};

/*	  		    音阶表				*/	
const unsigned int TONETABLE[15]={DO,RE,MI,FA,SO,LA,TI,DO_H,
			    	 	RE_H,MI_H,FA_H,SO_H,LA_H,TI_H,DO_HH};
/*			  音阶重装常数			*/						
unsigned int toneconst;						

void delay_us(int time)
{//微秒级延时程序     
 do
 {
  time--;
 }	
  while (time>1);
}	  

void delay_ms(unsigned int time)
{//毫秒级延时程序
 while(time!=0)
 {		
  delay_us(1000);
  time--;
 }
}		

#pragma interrupt_handler timer1_ovf_isr:iv_TIMER1_OVF
void timer1_ovf_isr(void)
	 {
	  TCNT1=toneconst;
	  PORTC^=1;
	 }	 	 
void music(void)
 	 {
	  unsigned char temp,temp1;
	  unsigned int sound_add=0;
 	  TCCR1A = 0x00;
	  TCCR1B =(1<<CS11);//8分频
	  temp1 = sound[sound_add];
	  while(temp1!=0)
 	  	{disp_temp(0,0,1);
			temp=temp1; 
			temp&=0x0f;

			if(temp!=0)
			  {
			   TIMSK|=(1<<TOIE1);//根据SOUNDTABLE中数据的低四位选择音调频率
			   temp--;			   
        	   	   toneconst=TONETABLE[temp];
			   TCNT1=toneconst;
 			  }
			temp=temp1;
			temp>>=4;
			temp&=0x0f;
			delay_ms(temp*129);//根据SOUNDTABLE中数据的高四位*5后,为音调持续时间
			TIMSK&=~(1<<TOIE1);
			sound_add++;
			temp1 = sound[sound_add]; 
		}
	//	delay_ms(1000);	
	                                 	
	 }	 	 	 	 
#define delaytime 300

//TIMER2 initialisation - prescale:256
// desired value: 1Sec
// actual value:  1.000Sec (0.0%)
void timer2_init(void)
{
 TCCR2 = 0x00; //stop 
 ASSR |= (1<<AS2); //set async mode
 TCNT2 = 0x80; //setup
 TCCR2 |= (1<<CS22)|(1<<CS21); //start
}

#pragma interrupt_handler timer2_ovf_isr:iv_TIMER2_OVF
void timer2_ovf_isr(void)
{
 TCNT2 = 0x80; //reload counter value
 PORTB^=1;
}



  
  
  
  
  

⌨️ 快捷键说明

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