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

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

?? 按鍵.c

?? 由單片機、DS18B20、DS1302、1602等組成時間溫度顯示系統。有Proteus圖和C語言程序
?? C
字號:
#include <reg51.h>
#include <intrins.h>
#define HIGH 1
#define LOW 0
#define  uchar unsigned char
#define  uint  unsigned int
//***************LCD1602********************************
#define DATA_MODE 0x28 //LCD模式設置,0x28位四位數據線模式
#define OPEN_SCREEN 0x0C //打開LCD顯示
#define DISPLAY_ADDRESS 0x80 //寫地址指令
#define CLEARSCREEN LCD_en_com(0x01) //清屏
#define LCDIO P0 //LCD1602的高四位接在P0口的高四位
sbit LCD1602_RS=P0^1; //RS為寄存器選擇,高電平時選擇數據寄存器、低電平時選擇指令寄存器。
sbit LCD1602_EN=P0^0; //E端為使能端,當E端由高電平跳變成低電平時,液晶模塊執行命令。
void LCD_en_com(uchar command); //寫命令指令
void LCD_en_dat(uchar temp); //寫數據指令
void LCD_set_xy(uchar x, unsigned char y); //設置顯示地址:X為橫軸(0-15),Y為縱軸(0-1).
void LCD_write_char(uchar x,uchar y,uchar dat); //寫一個字符
void LCD_write_string(uchar x,uchar y,uchar *s);//寫一個字符串
void LCD_write_int(uchar x,uchar y,uint intdat); //寫無字符型整形數
void LCD_init(void); //lcd初始化
void cover(void);
//************************DS1302*******************************************//
sbit ds1302_RST =P3^4; //ds1302的接線
sbit ds1302_IO  =P3^3;
sbit ds1302_SCLK=P3^2;
sbit ACC0=ACC^0;  //累加器
sbit ACC7=ACC^7;
uchar times[7]={0x50,0x59,0x23,0x30,0x11,0x07,0x08}; //存放時間
//uchar times[7];
uchar led[13];
void init_ds1302();
void get_ds1302() ;
void set_ds1302(uchar taddr,uchar *P1302);
uchar read_data_ds1302(uchar taddr);
void write_data_ds1302(uchar taddr,uchar tdata);
void write_Byte(uchar tdata);
uchar read_Byte();
void change_time(unsigned char i);
//*************************DS18B20*******************************************//
sbit DQ=P1^0;
uint   h;             //定義循環變量
uchar data  temp_data[2]={0x00,0x00};               // 讀出溫度暫放
uchar data  display[5]={0x00,0x00,0x00,0x00,0x00};//顯示單元數據,共4個數據,一個運算暫存用
uchar code ditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};
//************************其他******************************************//
sbit alarm_speaker=P3^7; //蜂鳴器的接線
void delay(uchar i); //延時程序
unsigned char key=16; //存放健值
//***************************************************************************************
void LCD_en_write(void) //EN端產生一個高電平脈沖,寫LCD
{
LCD1602_EN=HIGH;
_nop_();
LCD1602_EN=LOW;
}
//****************************************************************************************
void LCD_en_com(uchar command)
{
delay(9);
LCD1602_RS=LOW; //RS=0 寫命令
LCDIO&=0x0f;	//清高四位
LCDIO|=command&0xf0; //先發送高四位數據
LCD_en_write();
command=command<<4;
LCDIO&=0x0f;
LCDIO|=command&0xf0; //發送低四位數據
LCD_en_write();
}
//*****************************************************************************************
void LCD_en_dat(uchar dat)
{
delay(9);
LCD1602_RS=HIGH; //RS=1 寫數據
LCDIO&=0x0f;	 //清高四位
LCDIO|=dat&0xf0; //寫高四位
LCD_en_write();
dat=dat<<4;		 //低四位移到高四位
LCDIO&=0x0f;	 // 清高四位
LCDIO|=dat&0xf0; //寫低四位
LCD_en_write();
}
//**************設置顯示地址:X為橫軸(0-15),Y為縱軸(0-1)**************************************
void LCD_set_xy(uchar x,uchar y)
{
uchar address;
x&=0x0f;
if(!y)
address=0x80+x;
else
address=0xc0+x;
LCD_en_com(address);
}
//***************寫一個字符:X為橫軸(0-15),Y為縱軸(0-1)**********
void LCD_write_char(uchar x,uchar y,uchar dat)
{
LCD_set_xy(x,y);
LCD_en_dat(dat);
}
//***************寫一個字符串**********
void LCD_write_string(uchar x,uchar y,const uchar *s)
{
LCD_set_xy(x,y);
while(*s)
{
LCD_en_dat(*s);
s++;
}
}
//****************寫一個無字符整數***************************************
void LCD_write_int(uchar x,uchar y,uint intdat)
{
uchar i=0,temp[5];
LCD_set_xy(x,y);
if(intdat==0)
{
LCD_en_dat(0x30);
return;
}
while(intdat/10 || intdat%10)
{
temp[i]=intdat%10;
intdat/=10;
i++;
}
while(i)
{
i--;
LCD_en_dat(temp[i]+0x30);
}
}
//*****//LCD的初始化函數(剛上電的時候一定要調用一次)//*********************
void LCD_init(void)
{
LCD_en_com(DATA_MODE); //設計四位數據線模式
LCD_en_write();
delay(9);
LCD_en_com(DATA_MODE);
LCD_en_com(OPEN_SCREEN); //打開LCD顯示
LCD_en_com(DISPLAY_ADDRESS);//設計首地址
CLEARSCREEN; //清屏
delay(9);
}
//***********************18b20************
//*********************11微秒延時函數*********************//
void delay1(uint t)
{
for(;t>0;t--);
}
//*********************18B20復位函數*********************//
reset(void)
{
char presence=1;
while(presence)
{
while(presence)
  {
	DQ=1;_nop_();_nop_();//總線上拉
	DQ=0;                //下拉         
	delay1(50);           //維持550us,最短維持480us
	DQ=1;                //總線上拉
	delay1(6);            //檢測總線上升沿,66us
	presence=DQ;         //DS18B20發存在低電平信號(60-240us);presence=0繼續下一步
   }
delay1(30);              //延時300us,總線恢復高電平,DQ=1;
presence = ~DQ;         //取反,跳出循環
}
DQ=1;
} 
//*********************18B20寫命令函數*********************//
void write_byte1(uchar val)
{
uchar i;
for (i=8; i>0; i--) //定義 8 bit,寫 8 bit
{
DQ=1;_nop_();_nop_(); 
DQ = 0;_nop_();_nop_();_nop_();_nop_();_nop_();//5us
DQ = val&0x01;      //最低位移出,并寫入總線
delay1(6);           //66us
val=val/2;          //右移一位,倒數第二位變為最低位
}
DQ = 1;
delay(1);           //高電平維持11us,寫結束 
}
//*********************18B20讀1個字節函數*********************//
uchar read_byte1(void)
{
uchar i;
uchar value = 0;
for (i=8;i>0;i--)
{
DQ=1;_nop_();_nop_();
value>>=1;           //右移一位
DQ = 0;            
_nop_();_nop_();_nop_();_nop_();          //4us
DQ = 1;_nop_();_nop_();_nop_();_nop_();   //4us ,讀時隙
if(DQ)value|=0x80;   //DQ=1,則寫入為 10000000
delay1(6);            //66us
}
DQ=1;
return(value);
}
//*********************讀出溫度函數*********************//
read_temp()
{
	reset();       //總線復位
	write_byte1(0xCC); // 發Skip ROM命令
	write_byte1(0xBE); //  發讀命令
	temp_data[0]=read_byte1();  //溫度低8位
	temp_data[1]=read_byte1();  //溫度高8位
	reset();
	write_byte1(0xCC); // Skip ROM
	write_byte1(0x44); // 發轉換命令
}
//*********************溫度數據處理函數*********************//
work_temp()
{
uchar n=0;       //存儲符號
if(temp_data[1]>112)
 {temp_data[1]=(0xFF-temp_data[1]);temp_data[0]=(0xFF-temp_data[0]);n=1;} //負溫度求補碼

display[4]=temp_data[0]&0x0f;display[0]=ditab[display[4]];  //處理小數位
display[4]=((temp_data[0]&0xf0)>>4)|((temp_data[1]&0x0f)<<4);//低八位屏蔽小數位后右移四位與高八位屏蔽符號位后左移四位合并//
if(n){display[4]+=1;display[0]-=9;}
display[3]=display[4]/100;  //百位
display[1]=display[4]%100;  
display[2]=display[1]/10;   //十位
display[1]=display[1]%10;   //個位
LCD_write_int(11,1,display[1]); //顯示溫度的個位
LCD_en_dat('.');
LCD_write_int(13,1,display[0]); //顯示溫度的小數位
LCD_en_dat(0x27); //顯示'號
LCD_en_dat('C'); //顯示C
if(!display[3])
{
	LCD_write_string(9,1," ");
	if(!display[2])
	{
		LCD_write_string(10,1," ");
	}
	else
		LCD_write_int(10,1,display[2]);
} 
else
{
	LCD_write_int(9,1,display[3]);
	LCD_write_int(10,1,display[2]);
}
if(n)
{
	if(!display[2])
	LCD_write_string(10,1,"-");
	else
	LCD_write_string(9,1,"-");
}  //負溫度時最高位顯示"-"
}
/*====ds1302初始化====================*/
void init_ds1302()
{
    ds1302_RST=0;
    ds1302_SCLK=0;
}
/*====從1302讀出一字節數據并返回=====================*/
uchar read_Byte()
{
   uchar i;
   for(i=8;i>0;i--)
   {
     ACC=ACC>>1;
     ACC7=ds1302_IO;
     ds1302_SCLK=1;
     ds1302_SCLK=0;					
   } 
   return(ACC);
}
//*====向1302寫入一字節數據tdata====================*/ 
void  write_Byte(uchar tdata)
{
   uchar i;
   ACC=tdata;
   for(i=8;i>0;i--)
   {
     ds1302_IO=ACC0;
     ds1302_SCLK=1;
     ds1302_SCLK=0;
     ACC=ACC>>1;
   }
}
/*====向1302地址taddr處寫入數據tdata====================*/ 
void write_data_ds1302(uchar taddr,uchar tdata)
{
   ds1302_RST=0;
   ds1302_SCLK=0;
   ds1302_RST=1;
   write_Byte(taddr);
   write_Byte(tdata); 
   ds1302_RST=0;
   ds1302_SCLK=1;
}
/*====從1302地址taddr處讀出數據并返回====================*/ 
uchar read_data_ds1302(uchar taddr)
{  
   uchar tdata;
   ds1302_RST=0;
   ds1302_SCLK=0;
   ds1302_RST=1;
   write_Byte(taddr);
   tdata=read_Byte(); 
   ds1302_RST=0;
   ds1302_SCLK=1;
   return(tdata);
}
/*====設置時間====================*/
void set_ds1302(uchar taddr,uchar *P1302)
{
    uchar i;
    write_data_ds1302(0x8e,0x00);          
    for(i=0; i<7; i++)
    { 
       write_data_ds1302(taddr,*P1302);    
        P1302++;
        taddr+=2;
    }
   write_data_ds1302(0x8e,0x80);          
}
/*====讀出時間====================*/
void get_ds1302() 
{
    uchar k;
    uchar taddr = 0x81;
    for (k=0; k<7; k++)
    {
        times[k] = read_data_ds1302(taddr);
        taddr+=2;
    }
}
//**********轉換計算***************
void cover()
{
	led[0]=times[0]&0x0f;
	led[1]=times[0]>>4;
	led[2]=times[1]&0x0f;
	led[3]=times[1]>>4;
	led[4]=times[2]&0x0f;
	led[5]=times[2]>>4;
	led[6]=times[3]&0x0f;
	led[7]=times[3]>>4;
	led[8]=times[4]&0x0f;
	led[9]=times[4]>>4;
	led[10]=times[5];
	led[11]=times[6]&0x0f;
	led[12]=times[6]>>4;
}

//********顯示時間的函數**************//
void display_dat() //顯示時間和溫度的函數
{
LCD_write_int(12,0,led[10]);//顯示星期
LCD_write_int(0,0,2000+times[6]); //顯示年份
LCD_en_dat('-');
LCD_write_int(5,0,led[9]); //顯示月份
LCD_write_int(6,0,led[8]);
LCD_en_dat('-');
LCD_write_int(8,0,led[7]); //顯示日期
LCD_write_int(9,0,led[6]);
LCD_write_int(0,1,led[5]); //顯示小時
LCD_write_int(1,1,led[4]);
LCD_en_dat(':');
LCD_write_int(3,1,led[3]); //顯示分鐘
LCD_write_int(4,1,led[2]); 
LCD_en_dat(':');
LCD_write_int(6,1,led[1]); //顯示秒
LCD_write_int(7,1,led[0]);
}
//*================================================*/
void delay(unsigned char i) //延時函數
{
unsigned char j;
while(i--)
for(j=101;j>1;j--);
}
//*******************************
void key_scan()
{ unsigned char X,Y,Z,k=key;
P2=0x0f;
P2=0x0f; //先對P3置數行掃描
if(P2!=0x0f) //判斷是否有鍵按下
{ delay(5); //延時,軟件去干擾
if(P2!=0x0f) //確認按鍵按下X = P3;
{
X=P2; //保存行掃描時有鍵按下時狀態
P2=0xf0; //列掃描
delay(5);
Y=P2; //保存列掃描時有鍵按下時狀態
Z=X|Y; //取出鍵值
switch ( Z ) //判斷鍵值(那一個鍵按下)
{ 
case 0xe7: k=1;break; //秒
case 0xd7: k=5;break; //月
case 0xb7: k=9;break;//設溫
case 0x77: k=13;break;//確定
case 0xeb: k=2;break;//分
case 0xdb: k=6;break;//星期
case 0xbb: k=10;break;//定時
case 0x7b: k=14;break; //退出
case 0xed: k=3;break;//時
case 0xdd: k=7;break; //年
case 0xbd: k=11;break; //遞增
case 0x7d: k=15;break; //取消
case 0xee: k=4;break; //日
case 0xde: k=8;break; //鬧鐘
case 0xbe: k=12;break; //遞減
case 0x7e: k=16;break; //開關
}
key=k-1;
}
}
P2=0xff;
}
//******************溫度定時調整*****************************//
void change_time(unsigned char i)
{ 
	unsigned char tem=0,temp_time=0;
	if(i<=6)
		{
			if(i==0) {CLEARSCREEN;LCD_write_string(0,0,"Change second:");} //修改秒
			key=16;
			delay(250);
			while(1)
				{
					key_scan();
					if(key<10)
							{
								tem=(tem*10)+key;
								if((i==0 || i==1) && tem>59) tem=59;//確保修改的數據不超出限制,
								if((i==2 ) && tem>23) tem=23; //比如分不能超過60,月不能超過12等。
								if(i==3 && tem>31) tem=31; //如超過限制,則定為最大
								if(i==4 && tem>12) tem=12;
								if(i==5 && tem>7)
									{ 
						        	if(key<=6 && key!=0)tem=key;
						        	else tem=6;
							    	}
								delay(200);
								key=16;
					 	     }
					if(key==12 )break; //確定
					if(key==13) //取消	
						{
							tem/=10;
							key=16;
							delay(200);
						}
					if(key==14)return; //退出
					if(temp_time!=tem)
						{
							LCD_write_char(8,1,' '); //實時顯示修改的數據
							if(i==6)
								{
									LCD_write_int(9,1,20);
									LCD_en_dat(tem/10+0x30);
									LCD_en_dat(tem%10+0x30);
								}
							else
								{
								  	LCD_write_int(10,1,tem/10);
									LCD_write_int(11,1,tem%10);
								}
							temp_time=tem;
						}
					delay(100);
					get_ds1302();
					LCD_write_string(0,1,"Now: ");
					if(i==0)	//顯示秒
						{
							LCD_write_int(4,1,led[1]); 
							LCD_write_int(5,1,led[0]);
						}
				   	  }
		//for(i=0;i<7;i++)
	//	{
	//	times[i]=itime[i];
	//	}
		get_ds1302();
       // led[1]=tem/10;
	  //  led[0]=tem%10;
	   	times[0]=tem;
    	set_ds1302(0x80,&times[0]);
		}
}
//*************************************************
void main() //主函數
{
uchar i=0;
init_ds1302();
LCD_init();
set_ds1302(0x80,&times);
//for(i=0;i<7;i++)
//	{
//		times[i]=itime[i];
//	}
while(1)
{
get_ds1302(); //讀ds1302的時間
cover();
key_scan(); //掃描鍵盤
if(key<7) //如果鍵盤值小于7則進入修改界面
{
change_time(key);
key=16;
}
delay(30);
alarm_speaker=1;
delay(170);
read_temp();     //讀出18B20溫度數據
work_temp();     //處理溫度數據
display_dat();//顯示時間和溫度
}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区在线播放| 国产精品日日摸夜夜摸av| av在线播放成人| 懂色av一区二区三区免费看| 国产一区二区三区精品视频| 久久国产三级精品| 老色鬼精品视频在线观看播放| 天天色图综合网| 蜜芽一区二区三区| 看片的网站亚洲| 国产精品2024| proumb性欧美在线观看| 91蜜桃传媒精品久久久一区二区| 菠萝蜜视频在线观看一区| k8久久久一区二区三区| 在线观看日韩精品| 日韩一区二区视频| 久久久久国产精品麻豆ai换脸 | 777色狠狠一区二区三区| 欧美日本韩国一区二区三区视频| 91精品欧美综合在线观看最新 | 国产精品色一区二区三区| 国产亚洲成aⅴ人片在线观看| 国产日韩av一区| 亚洲精品久久7777| 亚洲国产va精品久久久不卡综合| 捆绑调教一区二区三区| 成人中文字幕电影| 欧美日韩国产bt| 中文字幕乱码亚洲精品一区| 亚洲精品成人悠悠色影视| 爽好久久久欧美精品| 国产在线视频不卡二| 91蜜桃视频在线| 久久先锋影音av鲁色资源网| 亚洲乱码国产乱码精品精可以看| 日本aⅴ亚洲精品中文乱码| 国产电影一区二区三区| 欧美日韩一本到| 国产亚洲欧美在线| 视频一区在线播放| av成人老司机| 精品盗摄一区二区三区| 一区二区三区国产豹纹内裤在线| 国产一区二区三区高清播放| 在线观看免费成人| 欧美激情中文不卡| 蜜臀av在线播放一区二区三区| 色呦呦一区二区三区| 国产丝袜在线精品| 久久91精品久久久久久秒播| 91久久人澡人人添人人爽欧美| 久久美女艺术照精彩视频福利播放| 亚洲日本va午夜在线影院| 国产一区二区三区香蕉| 欧美另类z0zxhd电影| 亚洲欧洲一区二区三区| 国产精品亚洲一区二区三区在线| 欧美日韩国产综合草草| 中文字幕av在线一区二区三区| 蜜臀va亚洲va欧美va天堂| 欧美午夜精品久久久久久超碰| 国产精品久久久久影院老司| 国产很黄免费观看久久| 精品久久久久久久人人人人传媒 | 久久久国产综合精品女国产盗摄| 三级在线观看一区二区| 欧美日韩一区三区| 亚洲国产精品自拍| 在线观看欧美精品| 午夜精品爽啪视频| 欧美三日本三级三级在线播放| 日韩久久一区二区| 一本色道a无线码一区v| 亚洲女同一区二区| a亚洲天堂av| 一区二区三区在线免费| 91久久一区二区| 午夜久久久影院| 91精品欧美一区二区三区综合在 | 国产自产视频一区二区三区| 日韩欧美在线观看一区二区三区| 五月天中文字幕一区二区| 欧美日韩一区精品| 亚洲bt欧美bt精品| 日韩免费观看高清完整版| 美女在线视频一区| 久久精品人人爽人人爽| 国产成人av一区二区三区在线| 中文字幕不卡三区| 91色porny蝌蚪| 日韩黄色免费网站| 国产午夜精品一区二区三区视频| 成人av在线资源| 亚洲综合免费观看高清完整版在线| 欧美日韩美少妇| 美女性感视频久久| 国产精品人妖ts系列视频| 欧美视频完全免费看| 亚洲尤物视频在线| 日韩久久精品一区| av电影在线观看一区| 亚洲国产精品久久人人爱| 欧美一级一区二区| 丰满放荡岳乱妇91ww| 亚洲成人av在线电影| 亚洲精品一区二区三区99| 91色综合久久久久婷婷| 男人的天堂亚洲一区| 国产精品久久二区二区| 欧美老肥妇做.爰bbww视频| 国产一区二区精品久久91| 一区二区三区丝袜| 精品久久免费看| 在线免费视频一区二区| 国产麻豆日韩欧美久久| 亚洲国产精品尤物yw在线观看| 久久婷婷成人综合色| 欧美日韩在线电影| 不卡的电视剧免费网站有什么| 免费一级片91| 亚洲啪啪综合av一区二区三区| 日韩精品专区在线影院重磅| 91片黄在线观看| 国产麻豆欧美日韩一区| 视频一区在线视频| 一二三四区精品视频| 国产欧美一区二区精品忘忧草| 91精品在线一区二区| 91在线免费视频观看| 国产一区不卡精品| 免费一级欧美片在线观看| 亚洲一二三四区不卡| 亚洲欧洲在线观看av| 欧美激情一区二区在线| 精品国产免费久久| 日韩三级视频在线看| 欧美日韩一区在线| 欧美日韩精品专区| 欧美在线观看18| 色狠狠色噜噜噜综合网| 99久久久精品| 99re成人在线| 不卡一区二区在线| 成人精品在线视频观看| 国产精品自在欧美一区| 精品一区二区三区视频在线观看 | 日韩一区二区三区视频在线观看| 色综合天天综合网国产成人综合天| 国产成人免费在线| 国产精华液一区二区三区| 国产自产视频一区二区三区| 日韩成人精品在线观看| 日韩中文字幕亚洲一区二区va在线 | 欧美一区二区三区视频免费| 欧美三级三级三级爽爽爽| 欧洲av在线精品| 欧洲av在线精品| 欧美日韩三级在线| 欧美日韩国产美| 日韩欧美在线1卡| 国产日韩精品久久久| 日本一区二区综合亚洲| 中文在线一区二区| 亚洲乱码中文字幕综合| 亚洲福利电影网| 久久精工是国产品牌吗| 国产福利视频一区二区三区| aaa国产一区| 欧美影院午夜播放| 91麻豆精品国产91久久久更新时间| 欧美一区二视频| 欧美韩国日本不卡| 亚洲欧美日韩综合aⅴ视频| 亚洲国产你懂的| 久久精品免费看| 成人avav影音| 欧美日韩激情在线| 久久―日本道色综合久久| 国产精品久久久久婷婷 | 欧美老肥妇做.爰bbww| 欧美一区二区三区四区久久| 久久综合九色综合97_久久久| 国产欧美日韩精品a在线观看| 亚洲日本青草视频在线怡红院| 一区二区三区久久| 狠狠v欧美v日韩v亚洲ⅴ| 99免费精品视频| 日韩欧美一级片| 国产精品久久久久久亚洲毛片| 亚洲va在线va天堂| 国产精品影视网| 欧美日韩免费一区二区三区视频| 日韩欧美一级二级| 18欧美乱大交hd1984| 日本aⅴ免费视频一区二区三区| www.99精品| 精品久久久网站| 亚洲成在线观看| 成人av在线看|