亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rtc.c

?? 單片機實例書籍
?? C
字號:
//***************************FileName:RTC.C************************//
//***************************ICCAVR V6.30編譯**********************//

#include <io8535v.h>                   //寄存器定義文件
#include <macros.h>                    //使用到宏
#define uchar unsigned char            //數(shù)據(jù)類型定義
#define uint unsigned char             //數(shù)據(jù)類型定義
#define SD2303 0x64                    //SD2303器件IIC識別碼


uchar Table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x76};
     //顯示數(shù)據(jù)表 0    1    2     3   4    5    6    7    8    9    L    H  
uchar Data[4]={0,0,0,0};               //DS1722
uchar Enter_Flag;                      //確定
uchar F_Flag;                          //數(shù)據(jù)應(yīng)答標(biāo)志

void DelayMs(uint i)                   //延時函數(shù)1
{uchar j;
 for(;i!=0;i--)
  {for(j=2000;j!=0;j--) {;}}
}

void Display(uchar *p)                //顯示函數(shù)
{uchar i,sel=0x00;
 for(i=0;i<16;i++)
  {PORTC=sel;
   PORTA=Table[p[i]];
   DelayMs(10);
   sel=sel<<1;
  }
}

  
void NOPNOP(uchar i)                   //延時函數(shù)2
{for(;i!=0;i--) NOP();}

void SetSCL(uchar i)                   //IIC時鐘線SCL設(shè)置
{if(i==1) PORTB=PORTB|0x01;
 else     PORTB=PORTB&0xFE;}
 
void SetSDA(uchar i)                   //IIC數(shù)據(jù)線SDA設(shè)置
{if(i==1) PORTB=PORTB|0x02;
 else     PORTB=PORTB&0xFD;}
 
//SCL=PB^0;       SD2303時鐘線  
//SDA=PB^1;       SD2303數(shù)據(jù)線 
//INTRB=PB^3;     SD2303中斷線A
//INTRA=PB^2;     SD2303中斷線B

void Start()                           //IIC總線開始信號
{SetSDA(1);
 SetSCL(1);
 NOPNOP(50);
 SetSDA(0);
 NOPNOP(50);
 SetSCL(0);
}

void Stop()                            //IIC總線停止信號
{SetSDA(0);             
 SetSCL(1);
 NOPNOP(50);
 SetSDA(1);
 NOPNOP(50);
 SetSCL(0);
}

void Ack()                             //單片機應(yīng)答信號
{SetSDA(0);
 SetSCL(1);   
 NOPNOP(50);
 SetSCL(0);
 SetSDA(1);     
}

void Nack()                            //單片機非應(yīng)答信號
{SetSDA(1);
 SetSCL(1);
 NOPNOP(50);
 SetSCL(0);
 SetSDA(0);
}

void Check_Ack()                       //器件應(yīng)答信號檢查
{SetSDA(1);
 SetSCL(1);
 F_Flag=0;
 DDRB=DDRB&0xFD; 
 if((PINB&0x02)==0)
   {SetSCL(0);
    NOPNOP(50);}
 else
    {F_Flag=1;
     SetSCL(0);
     NOPNOP(50);}
DDRB=DDRB|0x02;
}

void Write_Bit0()                      //向IIC總線寫0
{SetSDA(0);
 SetSCL(1);
 NOPNOP(50);
 SetSCL(0);
}

void Write_Bit1()                      //向IIC總線寫1
{SetSDA(1);
 SetSCL(1);
 NOPNOP(50);
 SetSCL(0);
 SetSDA(0);
}

void Write_Byte(uchar Data)            //向IIC總線寫一字節(jié)數(shù)據(jù)
{uchar i;
 for(i=0;i<8;i++)
   {if((Data&0x80)>0)       
         Write_Bit1();
    else
         Write_Bit0();
    Data<<=1;                        
    }
}


uchar Read_Byte()                      //從IIC總線讀一字節(jié)數(shù)據(jù)
{uchar nn=0xff;             
 uchar j;
 for (j=0;j<8;j++)
    {SetSDA(1);
     SetSCL(1);
     DDRB=DDRB&0xFB;
	
       if((PINB&0x02)==0)
	    {nn<<=1;
         nn=(nn&0xfe);                 
         SetSCL(0);}
     else 
        {nn<<=1;
         nn=(nn|0x01);                 
         SetSCL(0);}
    }
  DDRB=DDRB|0x02;
 return(nn);              
}

//****************************寫N個字節(jié)子程序**********************//
//函數(shù)參數(shù)說明:
//Slave:IIC器件地址,如上文定義的SD2303
//Address:起始地址
//Array:讀數(shù)據(jù)存放的數(shù)組
//Number:讀取的字節(jié)數(shù)
void Write_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
{uchar k;
 writ:do                     //開始->寫IIC器件地址->檢查應(yīng)答位
    {Start();
     Write_Byte(Slave);
     Check_Ack();
    }while(F_Flag==1);
   do
    {Write_Byte(Address<<4); //送起始地址->檢查應(yīng)答位
     Check_Ack();
    }while(F_Flag==1);
   for(k=0;k<Number;k++)     //寫Number個數(shù)據(jù)
    {Write_Byte(*Array);
	 Array++;
     Check_Ack();}           //檢查應(yīng)答位
   Stop();                 
}

//****************************寫一個字節(jié)子程序**********************//
//函數(shù)參數(shù)說明:
//Slave:IIC器件地址,如上文定義的SD2303
//Address:IIC器件寄存器地址
//Data:數(shù)據(jù)
void Write_1byte(uchar Slave,uchar Address,uchar Data)
{writ:do                     //開始->寫IIC器件地址->檢查應(yīng)答位
    {Start();
     Write_Byte(Slave);
     Check_Ack();
    }while(F_Flag==1);
   do
    {Write_Byte(Address<<4); //送起始地址->檢查應(yīng)答位
     Check_Ack();
    }while(F_Flag==1);
   Write_Byte(Data);
   Check_Ack();              //檢查應(yīng)答位
   Stop();                   //停止信號
}


//***************************讀N個字節(jié)子程序***********************//
//函數(shù)參數(shù)說明:
//Slave:IIC器件地址,如上文定義的SD2303
//Address:起始地址
//Array:讀數(shù)據(jù)存放的數(shù)組
//Number:讀取的字節(jié)數(shù)
void Read_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
{uchar data0,x;
    //第一步:開始信號->寫IIC器件地址->檢查應(yīng)答位
	do{Start();Write_Byte(Slave);Check_Ack();}while(F_Flag==1);
    //第二步:寫起始地址->檢查應(yīng)答位
    do {Write_Byte(Address<<4);Check_Ack();}while(F_Flag==1);
    //第三步:開始信號->寫IIC器件地址+1(表示讀)->檢查應(yīng)答位
    do{Start();Write_Byte(Slave+1);Check_Ack();}while(F_Flag==1);
    //第四步:讀N字節(jié),每讀完一字節(jié)發(fā)一個Ack應(yīng)答,最后一字節(jié)發(fā)Nack
    for(x=0;x<Number;x++)
     {data0=Read_Byte();*Array=data0;Array++;
	  if(x<(Number-1)) { Ack(); }}
    Nack();
    //第五步:發(fā)停止信號,結(jié)束讀操作
    Stop();
}

//***************************按鍵處理程序**************************//
//說明:為簡化程序設(shè)計,此程序不保證輸入的時間數(shù)據(jù)的合理性。
void Key_Process(void)
{uchar temp1[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  //輸入數(shù)據(jù)格式依次為年、月、日、星期、小時和分鐘
 uchar temp2[7]={0,0,0,0,0,0,0,};
 uchar temp3[3]={0,0,0xff};
  //輸入數(shù)據(jù)格式依次為小時和分鐘
 uchar Key;
 uchar *Flag;
 uchar i;
 Flag=temp1;
 if(PIND!=0xff)
  {DelayMs(20);                        //延時去抖
   if(PIND!=0xff)
   Key=PINB;
   if(Key==0xfe)                       //"時間設(shè)置"鍵按下
    {temp1[0]|=0x80;                   //年高位設(shè)置提示
	 while(!Enter_Flag)                //直到按下確定鍵方停止
       {for(i=0;i<50;i++)
	      Display(temp1);              //顯示和延時
		Key=~PIND;
		switch(Key)
		 {case 0x04:                   //"+"鍵處理
		       (*Flag)++;
			   if(((*Flag)&0x7f)==10) *Flag=0|0x80;
		       break;
		  case 0x08:                   //"-"鍵處理
		        if(((*Flag)&0x7f)==0)	*Flag=10|0x80; 
				(*Flag)--;
				break;
		  case 0x10:                   //"下一位"鍵處理
		        Flag++;
				(*(Flag-1))&=0x7f;     //上一位去掉小數(shù)點顯示
				(*Flag)|=0x80;         //當(dāng)前位加上小數(shù)點顯示
				if(Flag==temp1+13) 
				 {Flag=temp1;
				  (*Flag)|=0x80;
				  (*(Flag+13))&=0x7f;}
				break;
		  case 0x20:                   //"上一位"鍵處理
		        if(Flag==temp1) 
				    {(*Flag)&=0x7f;
					 Flag=temp1+13;
					 (*Flag)|=0x80;} 
				else Flag--;           
				(*Flag)|=0x80;         //當(dāng)前位加上小數(shù)點顯示
				(*(Flag+1))&=0x7f;     //下一位去掉點小數(shù)點顯示
				break;
		  case 0x40:Enter_Flag=1;break;//"確定"鍵處理
	//	  case 0x80:Enter_Flag=1;break;  //測試用
		  default:break;}
	    
	   }
	 Enter_Flag=0;                     //按鍵狀態(tài)恢復(fù)
     temp2[0]=0x00;                    //秒,默認(rèn)從00開始計時
	 temp2[1]=(temp1[11]<<4)|temp1[12];//分
	 temp2[2]=(temp1[9]<<4)|temp1[10]; //時
	 temp2[3]=temp1[8];                //周
	 temp2[4]=(temp1[6]<<4)|temp1[7];  //日
	 temp2[5]=(temp1[4]<<4)|temp1[5];  //月
	 temp2[6]=(temp1[2]<<4)|temp1[3];  //年
	 Write_Nbyte(SD2303,0x00,temp2,7); //初始化設(shè)定時間
    }
   if(Key==0xfd)                       //"鬧鈴設(shè)置"鍵按下
    {temp1[9]|=0x80;
	 Flag=temp1+9;                     //定時小時高位設(shè)置提示
	 while(!Enter_Flag)                //直到按下確定鍵方停止
       {for(i=0;i<50;i++)
	      Display(temp1);
		Key=~PINB;
		switch(Key)
		 {case 0x04:                   //"+"按鍵處理
		       (*Flag)++;
			   if(((*Flag)&0x7f)==10) *Flag=0|0x80;
		       break;
		  case 0x08:                   //"-"按鍵處理
		        if(((*Flag)&0x7f)==0)	*Flag=10|0x80; 
				(*Flag)--;
				break;
		  case 0x10:                   //"下一位"按鍵處理
		        Flag++;
				(*(Flag-1))&=0x7f;     //上一位去掉小數(shù)點顯示
				(*Flag)|=0x80;         //當(dāng)前位加上小數(shù)點顯示
				if(Flag==temp1+13) 
				 {(*Flag)&=0x7f;
				  Flag=temp1+9;
				  (*Flag)|=0x80;}
				break;
		  case 0x20:                   //"上一位"按鍵處理
		        if(Flag==temp1+9) 
				 {(*Flag)&=0x7f;
				  Flag=temp1+13;
				  (*Flag)|=0x80;}
				else Flag--;
				(*Flag)|=0x80;         //當(dāng)前位加上小數(shù)點顯示
				(*(Flag+1))&=0x7f;     //下一位去掉小數(shù)點顯示
				break;
		  case 0x40:Enter_Flag=1;break;//"確定"鍵處理
		//  case 0x80:Enter_Flag=1;break;//測試用
		  default:break;}
	    
	   }
	 Enter_Flag=0;
     temp3[0]=((temp1[11]<<4)|temp1[12])&0x7f; //分?jǐn)?shù)據(jù)處理,去掉小數(shù)點
	 temp3[1]=((temp1[9]<<4)|temp1[10])&0x7f;  //時數(shù)據(jù)處理,去掉小數(shù)點
	 if((temp3[0]<0x60)&&(temp3[1]<0x24))      //判斷是否為合法時間
	   {Write_1byte(SD2303,0x0e,0b10110000);   //開啟鬧鈴使能
	    Write_1byte(SD2303,0x0f,0b00101000);   //開始中斷使能
		Write_Nbyte(SD2303,0x08,temp3,3);}     //初始化鬧鈴設(shè)置
	 else  
	    Write_1byte(SD2303,0x0e,0b00110000);   //取消鬧鈴功能
    }
  }
}
 
 
//***************************DS1722函數(shù)開始************************//

void Convert(uchar p1,uchar *p2)
{uchar temp;
 if(p1&0x80)   
   {p2[13]=10;               //零下溫度用10表示                    
    p1=0xff-p1;}             //溫度絕對值
 else
   p2[13]=11;                //零上溫度用11表示
   p2[14]=p1/10;             //溫度十位
   p2[15]=p1-p2[14]*10;      //溫度個位
}

//***************************通過SPI接口寫數(shù)據(jù)函數(shù)*****************//
//函數(shù)參數(shù)說明:
//Address:DS1722寄存器地址
//Data:寫入的數(shù)據(jù)
void DSWrite_Byte(uchar Address,uchar Data)
{uchar clear;
 PORTB=PORTB|0x10;           //使能SPI器件
 SPDR=Address;
 while(!(SPSR&0x80)) {;}
 clear=SPSR;
 clear=SPDR;
 SPDR=Data;
 while(!(SPSR&0x80)) {;}
 clear=SPSR;
 clear=SPDR;
 PORTB=PORTB&0xef;
}


//***************************通過SPI接口讀數(shù)據(jù)函數(shù)*****************//
//函數(shù)參數(shù)說明:
//Address:DS1722寄存器地址
//返回值:讀取的溫度數(shù)據(jù)
uchar DSRead_Byte(uchar Address)
{uchar clear;
 uchar Data;
 PORTB=PORTB|0x10;
 SPDR=Address;
 while(!(SPSR&0x80)) {;}
 clear=SPSR;
 clear=SPDR;
 SPDR=Address;               //發(fā)空數(shù)據(jù)
 while(!(SPSR&0x80)) {;}
 clear=SPSR;
 Data=SPDR;
 PORTB=PORTB&0xef;
 return(Data);
}
 
void main(void)
{uchar i;
 uchar time[16]={2,0,0,4,1,2,2,7,1,1,7,3,0,0,0,0};
 uchar Set_Time[7]={0x50,0x30,0x20,0x03,0x05,0x01,0x05};
     //初始化時間   2005-01-05 Wed 20-30-50
 uchar SD,DS; 
 uchar SD2303_Controller1=0x00;              //禁止中斷
 uchar SD2303_Controller2=0x20;              //時間格式:24小時制
 DDRA=0xff;                                  //A口輸出
 DDRC=0xff;                                  //C口輸出
 DDRD=0x80;                                  //D口最高位輸出,其他帶上拉輸入
 PORTD=0x7F;
 DDRB=0xF3;                                  //B口帶第2、3位帶上拉輸入,其他輸出
 PORTB=0xF3;
 Write_1byte(SD2303,0x0e,SD2303_Controller1);//寫控制字
 Write_1byte(SD2303,0x0f,SD2303_Controller2);//寫控制字
 Write_Nbyte(SD2303,0x00,Set_Time,7);        //初始化時間
 SPCR=0b01011100;
 DSWrite_Byte(0x80,0xf0);                      //DS1722 8位分辨率自由轉(zhuǎn)換模式
 while(1)
	{Key_Process();                          //按鍵處理		
	 Read_Nbyte(SD2303,0x00,Set_Time,7);     //讀取時間
     time[2]=Set_Time[6]>>4;                 //年高位;
	 time[3]=Set_Time[6]&0x0f;               //年低位;
	 time[4]=Set_Time[5]>>4;                 //月高位;
     time[5]=Set_Time[5]&0x0f;               //月低位;
	 time[6]=Set_Time[4]>>4;                 //日高位;
	 time[7]=Set_Time[4]&0x0f;               //日低位;
	 time[8]=Set_Time[3];                    //星期;
	 time[9]=Set_Time[2]>>4;                 //時高位;
	 time[10]=Set_Time[2]&0x0f;              //時低位;
	 time[11]=Set_Time[1]>>4;                //分高位;
     time[12]=Set_Time[1]&0x0f;              //分低位;
	 time[13]=Set_Time[0]>>4;                //秒高位;
	 time[14]=Set_Time[0]&0x0f;              //秒低位;
	 Read_Nbyte(SD2303,0x0f,&SD,1);          //讀取中斷標(biāo)志位
	 if(SD&0x02)  PORTD=PORTD|0x80;          //響鈴1分鐘
	 else            PORTD=PORTD&0x7F;       //關(guān)閉鬧鈴 
     DS=DSRead_Byte(0x02);                   //讀取溫度值
     Convert(DS,time);
     Display(time);                          //時間顯示
   }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女国产一区二区三区| 国产欧美日韩另类视频免费观看| 中文字幕一区二区三区不卡| 图片区小说区国产精品视频| 91久久国产综合久久| 日韩一区日韩二区| 国产91精品露脸国语对白| 精品乱码亚洲一区二区不卡| 久久成人免费日本黄色| 日韩三级精品电影久久久| 奇米在线7777在线精品| 日韩欧美激情在线| 精品一区二区三区久久久| 精品欧美久久久| 国产一区不卡视频| 久久久久久久综合色一本| 男女男精品视频| 精品第一国产综合精品aⅴ| 黑人巨大精品欧美一区| 国产欧美一区二区精品秋霞影院 | 精品久久久久久久久久久久久久久| 香蕉久久夜色精品国产使用方法 | 欧美精品v国产精品v日韩精品| 久久久噜噜噜久噜久久综合| 丁香另类激情小说| 国产亚洲一本大道中文在线| 国产美女精品人人做人人爽| 国产精品欧美一区喷水| 色综合视频在线观看| 亚洲高清久久久| 欧美成人高清电影在线| 国产麻豆9l精品三级站| 中文字幕在线不卡一区二区三区| 粉嫩一区二区三区在线看| 中文字幕一区二区三区色视频 | 日韩一区二区三区在线观看| 成人av网站在线| 色94色欧美sute亚洲线路二 | 国产成人午夜精品影院观看视频| 国产精品人成在线观看免费| 国产丶欧美丶日本不卡视频| 自拍视频在线观看一区二区| 欧美一a一片一级一片| 蜜臀av性久久久久av蜜臀妖精 | 国产裸体歌舞团一区二区| 国产精品久久久久久久岛一牛影视| 色天天综合色天天久久| 日韩激情一区二区| 日韩精品中文字幕一区二区三区| 成人一道本在线| 亚洲成人av在线电影| 26uuuu精品一区二区| 色婷婷综合久色| 麻豆成人91精品二区三区| 亚洲欧美成aⅴ人在线观看| 欧美日韩一二区| 成人黄色一级视频| 日韩av电影免费观看高清完整版 | 欧美高清在线一区| 欧美怡红院视频| 国产经典欧美精品| 亚洲成在线观看| 日韩欧美123| 欧美日韩一区二区欧美激情| 国产麻豆精品一区二区| 五月天视频一区| 亚洲视频在线一区| 久久亚洲二区三区| 5858s免费视频成人| 91最新地址在线播放| 久久精品国产精品亚洲精品| 亚洲综合色区另类av| 国产精品拍天天在线| 亚洲黄色录像片| 国产三级一区二区三区| 久久综合色鬼综合色| 久久久夜色精品亚洲| 久久久91精品国产一区二区精品| 久久久久国产成人精品亚洲午夜| 日韩精品一区二| 亚洲精品一区二区三区蜜桃下载 | 日韩一区和二区| 欧美一卡二卡在线| 精品福利av导航| 欧美国产欧美亚州国产日韩mv天天看完整 | 欧美午夜精品免费| 在线欧美小视频| 欧美日本在线播放| 欧美一区二区视频网站| 亚洲精品一区二区三区蜜桃下载 | 色婷婷av一区二区三区大白胸| eeuss鲁片一区二区三区在线观看| 丁香五精品蜜臀久久久久99网站| 国产精品影视在线观看| 成人激情免费电影网址| 91免费观看国产| 欧美日韩成人在线| 日韩一级黄色大片| 国产亚洲综合在线| 欧美激情综合网| 一区二区三区**美女毛片| 亚洲国产一区二区视频| 日韩不卡一二三区| 国产成人午夜精品影院观看视频| 91一区二区在线观看| 欧美绝品在线观看成人午夜影视 | 久久精品一区二区三区不卡| 中文字幕在线一区二区三区| 亚洲一区二区在线免费看| 久久成人久久鬼色| 成人av资源在线| 69p69国产精品| 国产精品美女久久久久av爽李琼 | 欧美国产日韩在线观看| 亚洲一区二区精品视频| 久久综合综合久久综合| 99久久综合色| 日韩一区二区三区高清免费看看| 国产午夜亚洲精品午夜鲁丝片 | 亚洲一区在线观看免费| 久久66热re国产| 91极品美女在线| 欧美videos中文字幕| 一区在线观看免费| 青青草伊人久久| 成人av一区二区三区| 欧美日韩一区二区三区在线 | 亚洲伊人伊色伊影伊综合网| 美国av一区二区| 色狠狠色狠狠综合| 久久综合国产精品| 午夜精品福利视频网站 | 福利一区二区在线观看| 欧美美女一区二区三区| 国产精品欧美综合在线| 老司机午夜精品| 欧美区视频在线观看| 综合分类小说区另类春色亚洲小说欧美| 日韩福利视频网| 色成人在线视频| 国产日产欧美一区| 美女视频黄久久| 欧美三级一区二区| 国产精品美女久久久久久久网站| 男女男精品视频网| 欧美亚洲国产一区二区三区| 国产精品久久久久久久久果冻传媒 | 成人性生交大合| 精品剧情在线观看| 午夜天堂影视香蕉久久| 91浏览器入口在线观看| 亚洲国产精华液网站w| 国内精品在线播放| 日韩欧美在线影院| 亚洲成人午夜影院| 欧美网站一区二区| 一区二区三区在线观看欧美| www.av亚洲| 国产精品入口麻豆原神| 国产精品18久久久| 久久精品一区四区| 国产精品一区二区在线播放 | 亚洲影院理伦片| 在线日韩av片| 亚洲一区二区三区美女| 99riav久久精品riav| 亚洲视频在线观看一区| 91在线云播放| 亚洲乱码国产乱码精品精的特点| 99在线视频精品| 亚洲欧美影音先锋| 一本大道久久精品懂色aⅴ| 亚洲蜜桃精久久久久久久| 99精品国产视频| 亚洲自拍偷拍欧美| 欧美日韩日日夜夜| 亚洲国产成人va在线观看天堂| 欧美午夜在线观看| 日韩经典中文字幕一区| 日韩欧美在线网站| 国产一区二区不卡| 亚洲国产精品黑人久久久| 成人国产在线观看| 夜夜嗨av一区二区三区四季av | 久久久亚洲国产美女国产盗摄 | 亚洲永久精品大片| 这里只有精品免费| 久久91精品久久久久久秒播| 精品国产乱码久久| 成人夜色视频网站在线观看| 中文字幕在线播放不卡一区| 91久久久免费一区二区| 日日摸夜夜添夜夜添国产精品 | 99精品热视频| 首页亚洲欧美制服丝腿| 日韩免费观看高清完整版| 成人黄色一级视频| 亚洲电影第三页| 久久综合久久99| 欧洲人成人精品|