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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? rtc.c

?? 萬年歷掛鐘系統設計程序
?? C
字號:
//***************************FileName:RTC.C************************//
//***************************ICCAVR V6.30編譯**********************//

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


uchar Table[12]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x38,0x76};
     //顯示數據表 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;                          //數據應答標志

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

void Display(uchar *p)                //顯示函數
{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)                   //延時函數2
{for(;i!=0;i--) NOP();}

void SetSCL(uchar i)                   //IIC時鐘線SCL設置
{if(i==1) PORTB=PORTB|0x01;
 else     PORTB=PORTB&0xFE;}
 
void SetSDA(uchar i)                   //IIC數據線SDA設置
{if(i==1) PORTB=PORTB|0x02;
 else     PORTB=PORTB&0xFD;}
 
//SCL=PB^0;       SD2303時鐘線  
//SDA=PB^1;       SD2303數據線 
//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()                             //單片機應答信號
{SetSDA(0);
 SetSCL(1);   
 NOPNOP(50);
 SetSCL(0);
 SetSDA(1);     
}

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

void Check_Ack()                       //器件應答信號檢查
{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總線寫一字節數據
{uchar i;
 for(i=0;i<8;i++)
   {if((Data&0x80)>0)       
         Write_Bit1();
    else
         Write_Bit0();
    Data<<=1;                        
    }
}


uchar Read_Byte()                      //從IIC總線讀一字節數據
{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個字節子程序**********************//
//函數參數說明:
//Slave:IIC器件地址,如上文定義的SD2303
//Address:起始地址
//Array:讀數據存放的數組
//Number:讀取的字節數
void Write_Nbyte(uchar Slave,uchar Address,uchar *Array,uchar Number)
{uchar k;
 writ:do                     //開始->寫IIC器件地址->檢查應答位
    {Start();
     Write_Byte(Slave);
     Check_Ack();
    }while(F_Flag==1);
   do
    {Write_Byte(Address<<4); //送起始地址->檢查應答位
     Check_Ack();
    }while(F_Flag==1);
   for(k=0;k<Number;k++)     //寫Number個數據
    {Write_Byte(*Array);
	 Array++;
     Check_Ack();}           //檢查應答位
   Stop();                 
}

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


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

//***************************按鍵處理程序**************************//
//說明:為簡化程序設計,此程序不保證輸入的時間數據的合理性。
void Key_Process(void)
{uchar temp1[17]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  //輸入數據格式依次為年、月、日、星期、小時和分鐘
 uchar temp2[7]={0,0,0,0,0,0,0,};
 uchar temp3[3]={0,0,0xff};
  //輸入數據格式依次為小時和分鐘
 uchar Key;
 uchar *Flag;
 uchar i;
 Flag=temp1;
 if(PIND!=0xff)
  {DelayMs(20);                        //延時去抖
   if(PIND!=0xff)
   Key=PINB;
   if(Key==0xfe)                       //"時間設置"鍵按下
    {temp1[0]|=0x80;                   //年高位設置提示
	 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;     //上一位去掉小數點顯示
				(*Flag)|=0x80;         //當前位加上小數點顯示
				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;         //當前位加上小數點顯示
				(*(Flag+1))&=0x7f;     //下一位去掉點小數點顯示
				break;
		  case 0x40:Enter_Flag=1;break;//"確定"鍵處理
	//	  case 0x80:Enter_Flag=1;break;  //測試用
		  default:break;}
	    
	   }
	 Enter_Flag=0;                     //按鍵狀態恢復
     temp2[0]=0x00;                    //秒,默認從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); //初始化設定時間
    }
   if(Key==0xfd)                       //"鬧鈴設置"鍵按下
    {temp1[9]|=0x80;
	 Flag=temp1+9;                     //定時小時高位設置提示
	 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;     //上一位去掉小數點顯示
				(*Flag)|=0x80;         //當前位加上小數點顯示
				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;         //當前位加上小數點顯示
				(*(Flag+1))&=0x7f;     //下一位去掉小數點顯示
				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; //分數據處理,去掉小數點
	 temp3[1]=((temp1[9]<<4)|temp1[10])&0x7f;  //時數據處理,去掉小數點
	 if((temp3[0]<0x60)&&(temp3[1]<0x24))      //判斷是否為合法時間
	   {Write_1byte(SD2303,0x0e,0b10110000);   //開啟鬧鈴使能
	    Write_1byte(SD2303,0x0f,0b00101000);   //開始中斷使能
		Write_Nbyte(SD2303,0x08,temp3,3);}     //初始化鬧鈴設置
	 else  
	    Write_1byte(SD2303,0x0e,0b00110000);   //取消鬧鈴功能
    }
  }
}
 
 
//***************************DS1722函數開始************************//

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接口寫數據函數*****************//
//函數參數說明:
//Address:DS1722寄存器地址
//Data:寫入的數據
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接口讀數據函數*****************//
//函數參數說明:
//Address:DS1722寄存器地址
//返回值:讀取的溫度數據
uchar DSRead_Byte(uchar Address)
{uchar clear;
 uchar Data;
 PORTB=PORTB|0x10;
 SPDR=Address;
 while(!(SPSR&0x80)) {;}
 clear=SPSR;
 clear=SPDR;
 SPDR=Address;               //發空數據
 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位分辨率自由轉換模式
 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);          //讀取中斷標志位
	 if(SD&0x02)  PORTD=PORTD|0x80;          //響鈴1分鐘
	 else            PORTD=PORTD&0x7F;       //關閉鬧鈴 
     DS=DSRead_Byte(0x02);                   //讀取溫度值
     Convert(DS,time);
     Display(time);                          //時間顯示
   }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91九色最新地址| 午夜精品免费在线观看| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲国产精品视频| 欧美日韩视频在线一区二区 | 日韩欧美成人激情| 青青国产91久久久久久| 精品奇米国产一区二区三区| 久久爱www久久做| 国产欧美一区视频| 91香蕉视频污在线| 亚洲在线成人精品| 精品久久国产老人久久综合| 国产精品69毛片高清亚洲| 中文字幕中文在线不卡住| 欧美最猛性xxxxx直播| 日本不卡视频在线| 国产偷国产偷亚洲高清人白洁| 成人听书哪个软件好| 亚洲黄色尤物视频| 日韩女优电影在线观看| 粉嫩欧美一区二区三区高清影视| 成人欧美一区二区三区小说 | 日韩一区二区影院| 国产成人小视频| 亚洲国产乱码最新视频| 亚洲精品一区二区三区香蕉| 97精品久久久久中文字幕 | 亚洲精品欧美激情| 日韩欧美自拍偷拍| eeuss鲁片一区二区三区| 视频一区免费在线观看| 国产午夜精品久久久久久免费视 | 亚洲一区二区偷拍精品| 欧美精品一区男女天堂| 色综合一区二区| 精品影院一区二区久久久| 亚洲人亚洲人成电影网站色| 欧美电视剧在线看免费| 91香蕉视频污在线| 国产大陆a不卡| 水野朝阳av一区二区三区| 中文字幕一区日韩精品欧美| 日韩色视频在线观看| 欧美性生活影院| 成人午夜激情视频| 国产自产视频一区二区三区| 婷婷久久综合九色综合伊人色| 国产欧美久久久精品影院| 欧美一区午夜精品| 日本乱码高清不卡字幕| 国产aⅴ综合色| 激情av综合网| 日本系列欧美系列| 亚洲一区在线视频| 1区2区3区精品视频| 国产亚洲一二三区| 精品久久久久一区| 欧美一卡二卡三卡四卡| 欧美日韩一级二级三级| 91电影在线观看| 99久久久精品免费观看国产蜜| 国产精品一区在线观看你懂的| 日韩不卡手机在线v区| 亚洲一区二区三区视频在线播放 | 国产精品久久久久天堂| 2024国产精品| 日韩精品专区在线影院观看 | 国产激情视频一区二区三区欧美 | 成人av电影在线观看| 国产乱人伦精品一区二区在线观看| 日本不卡的三区四区五区| 亚洲一卡二卡三卡四卡无卡久久| 中文字幕一区二区三区在线播放| 国产偷国产偷亚洲高清人白洁| 精品不卡在线视频| 亚洲精品在线免费播放| 久久综合久久综合久久| 久久久久9999亚洲精品| 久久影院视频免费| 久久精品视频免费观看| 欧美激情综合在线| 日韩一区日韩二区| 亚洲综合一区二区精品导航| 一级女性全黄久久生活片免费| 亚洲免费在线视频一区 二区| 日韩毛片在线免费观看| 亚洲欧美激情一区二区| 亚洲一区在线观看免费观看电影高清 | 综合欧美亚洲日本| 亚洲精品国产一区二区三区四区在线 | 石原莉奈在线亚洲三区| 日本中文字幕一区二区有限公司| 日本色综合中文字幕| 久久国产夜色精品鲁鲁99| 精品一区二区三区在线视频| 国产资源在线一区| www.av亚洲| 欧洲一区二区av| 日韩一区二区中文字幕| 久久久精品国产免大香伊| 国产精品久久久久久久久晋中| 亚洲区小说区图片区qvod| 一区二区三区电影在线播| 午夜国产精品影院在线观看| 美女网站色91| 成人h精品动漫一区二区三区| 色av成人天堂桃色av| 欧美精品丝袜久久久中文字幕| 日韩三级中文字幕| 国产精品麻豆欧美日韩ww| 亚洲无线码一区二区三区| 麻豆成人久久精品二区三区红 | 久久精品免费看| 成人性生交大片免费看中文 | 成人久久久精品乱码一区二区三区| 99精品视频中文字幕| 制服丝袜亚洲色图| 中文子幕无线码一区tr| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲精品高清视频在线观看| 日韩电影在线一区二区三区| 国产黄人亚洲片| 欧美日韩一区二区三区四区五区| 久久午夜国产精品| 亚洲自拍偷拍av| 国产成人精品一区二区三区网站观看| 色婷婷久久久久swag精品| 2020国产精品久久精品美国| 一区二区三区免费看视频| 国产麻豆视频精品| 欧美精品久久天天躁| 成人欧美一区二区三区白人| 老司机精品视频在线| 在线观看免费一区| 国产欧美一区二区精品婷婷| 日韩成人一区二区三区在线观看| 成人av午夜电影| 精品国产露脸精彩对白| 亚洲成人福利片| 色老综合老女人久久久| 国产清纯美女被跳蛋高潮一区二区久久w| 亚洲国产一区二区三区| www.亚洲在线| 久久久精品国产免大香伊| 裸体在线国模精品偷拍| 欧美图区在线视频| 亚洲欧洲综合另类| 成人一区二区三区视频在线观看| 日韩欧美国产不卡| 午夜欧美大尺度福利影院在线看| 99久久免费精品高清特色大片| 久久久久久电影| 国产乱子伦视频一区二区三区 | 国产不卡在线视频| 精品精品国产高清一毛片一天堂| 五月天丁香久久| 欧美性色黄大片手机版| 一区二区三区日本| 在线亚洲一区观看| 艳妇臀荡乳欲伦亚洲一区| 色欧美片视频在线观看在线视频| 国产欧美一区二区精品忘忧草 | 色综合一个色综合| 18成人在线观看| 色哟哟日韩精品| 一区二区三区四区不卡在线| 一本到三区不卡视频| 亚洲精品视频在线观看网站| 91丨porny丨首页| 亚洲麻豆国产自偷在线| 91黄视频在线观看| 亚洲自拍与偷拍| 91精品国产综合久久久久| 亚洲成人精品一区二区| 91精品国产综合久久国产大片| 日韩不卡一区二区三区| 欧美xxxx在线观看| 国产高清在线观看免费不卡| 中文字幕第一区综合| 99精品视频一区二区三区| 亚洲人一二三区| 欧美精品在线一区二区| 精品一区二区三区久久久| 国产亚洲美州欧州综合国| 成人丝袜高跟foot| 亚洲一区二区黄色| 欧美tickling网站挠脚心| 国产精品一区免费视频| 中文字幕日本乱码精品影院| 在线观看av不卡| 久久66热偷产精品| 国产精品午夜春色av| 色综合久久综合| 日韩二区三区在线观看| 国产嫩草影院久久久久| 在线观看亚洲a| 六月婷婷色综合| 国产精品久久国产精麻豆99网站| 欧美无人高清视频在线观看|