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

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

?? 2402test.c

?? 《愛上單片機》配書光盤(書本的制作作品所要的程序)
?? C
?? 第 1 頁 / 共 3 頁
字號:

/********************************************************************************************
//Dy-2402C 桌面控制鐘
//應用程序 C 
//杜洋
//V1.0 2007-4-20
//MCS-51 12MHZ C語言
//LCM2402 89S52 DS18B20 DS1302 AT24C02 紅外接收IC
*********************************************************************************************/

/********************************************************************************************/
#include <AT89X52.h>
#include <string.h>                               // 包含頭文件    
/********************************************************************************************/
typedef unsigned char      uint8;                // 無符號8位整型變量
typedef unsigned short     uint16;               // 無符號16位整型變量
typedef signed   char      int8;                 // 有符號8位整型變量

sbit LED1   = P2 ^ 3;                      // 定義LCM2402的RS控制線

/********************************************************************************************/
//全局變量
static unsigned char data IRCode[3],IRCON,IRCON2;//遙控器中斷專用
static unsigned char data DT,menu,rom,alarm_con;//遙控寄存值/菜單值/定時器組值/報警開關選擇
/********************************************************************************************/


//=================================LCM2402模塊驅動===========================================//

/********************************************************************************************/
#define      LCM2402_DB0_DB7      P0             // 定義LCM2402的數據總線

sbit LCM2402_RS   = P1 ^ 0;                      // 定義LCM2402的RS控制線
sbit LCM2402_RW   = P1 ^ 2;                      // 定義LCM2402的RW控制線
sbit LCM2402_E    = P1 ^ 1;                      // 定義LCM2402的E控制線
sbit LCM2402_Busy = P0 ^ 7;                      // 定義LCM2402的測忙線(與LCM2402_DB0_DB7關聯)

/********************************************************************************************/
//定義LCM2402指令集//
#define			CMD_clear		0x01             // 清除屏幕
#define			CMD_back		0x02             // DDRAM回零位
#define			CMD_dec1		0x04             // 讀入后AC(指針)減1,向左寫
#define			CMD_add1		0x06             // 讀入后AC(指針)加1,向右寫
#define			CMD_dis_gb1		0x0f             // 開顯示_開光標_開光標閃爍
#define			CMD_dis_gb2		0x0e             // 開顯示_開光標_關光標閃爍
#define			CMD_dis_gb3		0x0c             // 開顯示_關光標_關光標閃爍
#define			CMD_OFF_dis		0x08             // 關顯示_關光標_關光標閃爍
#define			CMD_set82		0x38             // 8位總線_2行顯示
#define			CMD_set81		0x30             // 8位總線_1行顯示(上邊行)
#define			CMD_set42		0x28             // 4位總線_2行顯示
#define			CMD_set41		0x20             // 4位總線_1行顯示(上邊行)
#define			lin_1			0x80             // 4位總線_1行顯示(上邊行)
#define			lin_2			0xc0             // 4位總線_1行顯示(上邊行)


/********************************************************************************************[底層協議]
* 函數名稱:DelayS()	
* 功    能:延時
*********************************************************************************************/
void DelayS(unsigned int a){
	unsigned char i;
	while( --a != 0){		
		for(i = 0; i < 125; i++);  	//一個 ; 表示空語句,CPU空轉。
	}   				   			//i 從0加到125,CPU大概就耗時1毫秒
}
void DelayS250(void){
	DelayS(250);
}
/********************************************************************************************[底層協議]
* 函數名稱:LCM2402_TestBusy()
* 功    能:LCM2402測忙,若LCM2402處于忙狀態,本函數將繼續測忙,直到LCM2402處于非忙狀態。
*********************************************************************************************/
void LCM2402_TestBusy(void){
   LCM2402_DB0_DB7 = 0xff;//設備讀狀態
   LCM2402_RS = 0;
   LCM2402_RW = 1;
   LCM2402_E = 1;
   while(LCM2402_Busy);//等待LCM不忙
   LCM2402_E = 0;//
}
/********************************************************************************************[底層協議]
* 函數名稱:LCM2402_WriteCMD()
* 功    能:向LCM2402寫命令。
* 入口參數:LCM2402_command     要寫入LCM2402的命令字節
* 出口參數:無
*********************************************************************************************/
void LCM2402_WriteCMD(uint8 LCM2402_command) { 
  LCM2402_TestBusy();
  LCM2402_DB0_DB7 = LCM2402_command;
  LCM2402_RS = 0;
  LCM2402_RW = 0;
  LCM2402_E = 1;
  LCM2402_E = 0;
}
/********************************************************************************************[底層協議]
* 函數名稱:LCM2402_WriteData()
* 功    能:向LCM2402寫數據。
* 入口參數:LCM2402_data     要寫入LCM2402的數據字節
* 出口參數:無
*********************************************************************************************/
void LCM2402_WriteData(uint8 LCM2402_data){ 
    LCM2402_TestBusy();
	LCM2402_DB0_DB7 = LCM2402_data;
  LCM2402_RS = 1;
  LCM2402_RW = 0;
  LCM2402_E = 1;
  LCM2402_E = 0;
}
/********************************************************************************************
* 函數名稱:LCM2402_Init()
* 功    能:LCM2402初始化
* 入口參數:無
* 出口參數:無
*********************************************************************************************/
void LCM2402_Init(void){
  LCM2402_WriteCMD(CMD_set82);// 顯示模式設置:顯示2行,每個字符為5*7個像素
  LCM2402_WriteCMD(CMD_clear);// 顯示清屏
  LCM2402_WriteCMD(CMD_back);// 數據指針指向第1行第1個字符位置
  LCM2402_WriteCMD(CMD_add1);// 顯示光標移動設置:文字不動,光標右移
  LCM2402_WriteCMD(CMD_dis_gb3); // 顯示開及光標設置:顯示開,光標開,閃爍開
}


/********************************************************************************************
* 函數名稱:print()
* 功    能:向LCM發送一個字符串,長度48字符之內。//應用:print("doyoung.net");
* 入口參數:字符串
* 出口參數:無
*********************************************************************************************/
void print(uint8 a,uint8 *str){
		LCM2402_WriteCMD(a);
		while(*str != '\0'){
			LCM2402_WriteData(*str++);
        }
		*str = 0;
}
/********************************************************************************************
* 函數名稱:print2()
* 功    能:向LCM發送一個字符串,長度48字符之內。//應用:print("doyoung.net");
* 入口參數:字符串
* 出口參數:無
*********************************************************************************************/
void print2(uint8 a,uint8 t){//設置寫入地址和數據//
		LCM2402_WriteCMD(a);
		LCM2402_WriteData(t);
}



//=================================AT24C02模塊驅動===========================================//
//應用舉例//
//AT24C02_Write1Byte(0x02,0xaa);                 	// 向AT24C02的地址0x02寫入0xaa
//i = AT24C02_Read1Byte(0x02);              		// 從AT24C02的地址0x02讀出數據給變量i
/*********************************************************************************************/
#define AT24C02_WriteDeviceAddress 0xa0			 /* 定義器件在I2C總線中的地址 */
#define AT24C02_ReadDeviceAddress  0xa1
sbit SCL=P2^1;      /* 定義位變量 */             // I2C總線的時鐘信號
sbit SDA=P2^2;                                   // I2C總線的數據信號
#define TRUE        1
#define FALSE       0
#define I2C_DelayTime 60                         // 不要小于50,否則可能造成時序混亂
/********************************************************************************************
* 函數名稱:I2C_Delay()
* 功    能:I2C總線軟件延時
* 入口參數:count    延時參數,值越大,延時越長
* 出口參數:無
*********************************************************************************************/
void I2C_Delay(uint16 count){
  while(count!=0) count--;
}
/********************************************************************************************
* 函數名稱:I2C_Start()
* 功    能:啟動I2C總線
* 入口參數:無
* 出口參數:無
*********************************************************************************************/
void I2C_Start(void){
  SDA=1; 
  SCL=1; 
  I2C_Delay(I2C_DelayTime);
  SDA=0; 
  I2C_Delay(I2C_DelayTime);
  SCL=0;
  I2C_Delay(I2C_DelayTime);
}
/********************************************************************************************
* 函數名稱:I2C_Stop()
* 功    能:終止I2C總線
* 入口參數:無
* 出口參數:無
*********************************************************************************************/
void I2C_Stop(void){
  SDA=0;
  SCL=1;
  I2C_Delay(I2C_DelayTime);
  SDA=1;
  I2C_Delay(I2C_DelayTime);
  SCL=0;
  I2C_Delay(I2C_DelayTime);
}
/********************************************************************************************
* 函數名稱:I2C_Send_Bit_0()
* 功    能:發送比特0
* 入口參數:無
* 出口參數:無
*********************************************************************************************/
void I2C_Send_Bit_0(void){
  SDA=0;
  SCL=1;
  I2C_Delay(I2C_DelayTime);
  SCL=0;
  I2C_Delay(I2C_DelayTime);
}
/********************************************************************************************
* 函數名稱:I2C_Send_Bit_1()
* 功    能:發送比特1
* 入口參數:無
* 出口參數:無
*********************************************************************************************/
void I2C_Send_Bit_1(void){
  SDA=1;
  SCL=1;
  I2C_Delay(I2C_DelayTime);
  SCL=0;
  I2C_Delay(I2C_DelayTime);
}
/********************************************************************************************
* 函數名稱:I2C_Check_Ack()
* 功    能:發送完一個字節后檢驗設備的應答信號
* 入口參數:無
* 出口參數:返回值為True,成功
*           返回值為False,失敗
*********************************************************************************************/
bit I2C_Check_Ack(void){
  SDA=1;
  SCL=1;
  I2C_Delay(I2C_DelayTime/2);
  F0=SDA;
  I2C_Delay(I2C_DelayTime/2);
  SCL=0;
  I2C_Delay(I2C_DelayTime);
  if(F0==1) return FALSE;
  return TRUE;
}
/********************************************************************************************
* 函數名稱:I2C_Write8Bit()
* 功    能:向I2C總線寫入8bit數據
* 入口參數:I2C_data     將要寫入I2C總線的8bit數據 
* 出口參數:無
*********************************************************************************************/
void I2C_Write8Bit(uint8 I2C_data)reentrant{
	uint8 i;
	for(i=0;i<8;i++){
		if((I2C_data<<i)&0x80){
			I2C_Send_Bit_1();
		}
		else{
			I2C_Send_Bit_0();
		}
	}
}
/********************************************************************************************
* 函數名稱:I2C_Read8Bit()
* 功    能:從I2C總線接收8bit數據
* 入口參數:無
* 出口參數:返回值為從I2C總線上接收到的8bit數據
*********************************************************************************************/
uint8 I2C_Read8Bit(void)reentrant{
	uint8 I2C_data=0,i;  
	for(i=0;i<8;i++){   
		SDA=1;    
		SCL=1;    
		I2C_Delay(10);
		F0=SDA;
		I2C_Delay(10);
		SCL=0;
		if(F0==1){
			I2C_data=I2C_data<<1;
			I2C_data=I2C_data|0x01;
		}
		else{
			I2C_data=I2C_data<<1;
		}
	}
    return I2C_data;
}
/********************************************************************************************
* 函數名稱:AT24C02_Write1Byte()
* 功    能:向AT24C02指定地址上寫入1字節數據
* 入口參數:AT24C02_Address   AT24C02內的地址
*           AT24C02_1Byte     將要寫入AT24C02的1字節數據
* 出口參數:無
*********************************************************************************************/
void AT24C02_Write1Byte(	uint8 AT24C02_Address,
							uint8 AT24C02_1Byte){
  bit AckTemp=1;  
  I2C_Start();
  I2C_Write8Bit(AT24C02_WriteDeviceAddress);
  AckTemp=I2C_Check_Ack();
  I2C_Write8Bit(AT24C02_Address);                   
  AckTemp=I2C_Check_Ack();
  I2C_Write8Bit(AT24C02_1Byte);                 
  AckTemp=I2C_Check_Ack();
  I2C_Stop();
}
/********************************************************************************************
* 函數名稱:AT24C02_Read1Byte()
* 功    能:從AT24C02指定地址上讀出1字節數據
* 入口參數:AT24C02_Address   AT24C02內的地址
* 出口參數:從AT24C02指定地址上讀出的1字節數據
*********************************************************************************************/
uint8 AT24C02_Read1Byte(uint8 AT24C02_Address){    
	bit AckTemp=1;  
  	uint8 AT24C02_1Byte;
  	I2C_Start();
  	I2C_Write8Bit(AT24C02_WriteDeviceAddress);
  	AckTemp=I2C_Check_Ack();
  	I2C_Write8Bit(AT24C02_Address);
  	AckTemp=I2C_Check_Ack();
  	I2C_Start();
  	I2C_Write8Bit(AT24C02_ReadDeviceAddress);
  	AckTemp=I2C_Check_Ack();
  	AT24C02_1Byte=I2C_Read8Bit();
  	AckTemp=I2C_Check_Ack();
  	I2C_Stop();
  	return AT24C02_1Byte;
}
/********************************************************************************************/
//設置定時值程序
void Set_alarm(unsigned char m,unsigned char sel,bit a){ //根據選擇調整的相應項目加1并寫入DS1302
  signed char address,item,item2;
  signed char max,mini;
  if(sel==7)  {address=0x0B; max=59;mini=0;}     //秒7
  if(sel==6)  {address=0x0A; max=59;mini=0;}    //分鐘6
  if(sel==5)  {address=0x09; max=23;mini=0;}    //小時5
  if(sel==4)  {address=0x08; max=7;mini=1;}    //星期4  
  if(sel==3)  {address=0x07; max=31;mini=0;}    //日3
  if(sel==2)  {address=0x06; max=12;mini=0;}    //月2
  if(sel==1)  {address=0x05; max=99; mini=0;}    //年1
  if(sel==8)  {address=0x04; max=99; mini=0;}    //鍵號值
  address=address+(m*10);//選擇定時項組

  		
  if (a == 0){//如果a是0則表示現在鍵入的是 十位 數據
  	AT24C02_Write1Byte(address,0x00);//將 個位 的數據清0 防止數值范圍計算有錯
    item = DT;//鍵值數給 十位
	item2 = 0;// 個位 填入 0
  }
  else{//否則是 個位數據
  	if(sel == 4){
		item = 0;
	}
	else{
  		item = (AT24C02_Read1Byte(address))/16;//先讀出 十位 數據
	}
    item2 = DT;//鍵值放入 個位
  }  
  item=(item)*10 + (item2);//將 十位 和 個位 數據合成	 
  if(item>max) item=mini;//查看數值有效范圍   
  if(item<mini) item=max;           
  AT24C02_Write1Byte(address,(item/10)*16+item%10);//轉換成16進制寫入24C00
  if(DT == 0x12){
  	AT24C02_Write1Byte(address,0xff);
  }	
}
/*****************************************************************************/



//===================================DS18B20驅動===========================================//
sbit DQ   = P2 ^ 0;                      // 定義DS18B20數據線

/******************************************************************************/
void Delay(int num)//延時函數
{
	while(num--) ;
}	
/******************************************************************************/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色先锋资源久久综合| 久久国产精品露脸对白| 91亚洲资源网| 亚洲人成网站在线| 欧美色精品在线视频| 亚洲高清视频在线| 欧美一区二区三区在线观看| 久久99精品久久久久久国产越南| 久久蜜桃av一区精品变态类天堂| 国产69精品久久777的优势| 国产精品第一页第二页第三页| 99久久夜色精品国产网站| 日日摸夜夜添夜夜添亚洲女人| 欧美夫妻性生活| 国产九色sp调教91| 亚洲天堂av一区| 5566中文字幕一区二区电影 | 在线不卡的av| 另类小说欧美激情| 国产女主播视频一区二区| 99免费精品在线观看| 亚洲国产综合91精品麻豆 | 日韩女优视频免费观看| 国产精品影视网| 亚洲午夜电影网| 久久久久久久久久电影| 91黄色免费观看| 国内欧美视频一区二区| **性色生活片久久毛片| 91精品国产一区二区三区蜜臀| 国产成人在线电影| 五月激情综合婷婷| 欧美激情中文不卡| 精品视频在线免费观看| 国产精品自在欧美一区| 五月天激情小说综合| 国产日韩欧美亚洲| 欧美日韩成人高清| 福利91精品一区二区三区| 一区二区国产视频| 国产欧美1区2区3区| 欧美一二三区精品| 欧美性一二三区| 国产成人精品免费网站| 蜜桃视频一区二区| 亚洲精品午夜久久久| 国产欧美精品区一区二区三区| 88在线观看91蜜桃国自产| 国产精品自在欧美一区| 日韩va亚洲va欧美va久久| 国产精品乱码一区二三区小蝌蚪| 日韩精品一区二区三区三区免费 | 91精品国产福利在线观看| av网站免费线看精品| 91丝袜国产在线播放| 美女任你摸久久| 亚洲国产精品影院| 亚洲天堂a在线| 国产精品乱子久久久久| 久久久亚洲欧洲日产国码αv| 91精品国产手机| 在线看一区二区| 色综合久久六月婷婷中文字幕| 国产成人激情av| 国产精品 日产精品 欧美精品| 精品综合久久久久久8888| 日韩中文字幕不卡| 无吗不卡中文字幕| 亚洲成人你懂的| 亚洲一区二区三区四区五区中文| 亚洲视频在线一区观看| 国产精品久久精品日日| 日本一区二区免费在线观看视频 | 91麻豆国产福利精品| 99精品欧美一区二区三区小说 | www激情久久| 精品国产99国产精品| 日韩欧美美女一区二区三区| 777xxx欧美| 欧美本精品男人aⅴ天堂| 日韩亚洲欧美综合| 精品88久久久久88久久久| 精品嫩草影院久久| 欧美精品一区二区三区蜜桃视频 | 日本aⅴ免费视频一区二区三区| 亚洲精品美腿丝袜| 亚洲尤物在线视频观看| 亚洲成av人影院在线观看网| 午夜免费久久看| 美女国产一区二区三区| 韩国毛片一区二区三区| 国产丶欧美丶日本不卡视频| 成人激情小说网站| 欧美中文字幕不卡| 欧美日韩国产bt| 精品国产麻豆免费人成网站| 国产人成亚洲第一网站在线播放 | 欧美性猛交xxxx乱大交退制版 | 在线成人av网站| 久久中文字幕电影| 中文字幕国产精品一区二区| 亚洲激情自拍视频| 日韩av成人高清| 国产高清不卡一区二区| 色综合久久久久综合| 欧美吻胸吃奶大尺度电影| 91精品国产综合久久福利| 国产亚洲午夜高清国产拍精品| 国产精品国产三级国产普通话蜜臀 | 亚洲国产精品99久久久久久久久| 最新欧美精品一区二区三区| 亚洲成人精品在线观看| 蜜臀a∨国产成人精品| 国产91丝袜在线观看| 色婷婷国产精品久久包臀| 51精品视频一区二区三区| 国产欧美一区二区精品性色超碰| 一区二区三区中文字幕精品精品| 另类小说图片综合网| 91免费国产视频网站| 欧美v日韩v国产v| 亚洲欧美欧美一区二区三区| 精品中文字幕一区二区小辣椒| 91小视频免费看| 久久亚区不卡日本| 亚洲一卡二卡三卡四卡无卡久久 | 久久99精品久久久久久| 日本福利一区二区| 精品91自产拍在线观看一区| 亚洲自拍偷拍麻豆| 国产东北露脸精品视频| 制服丝袜激情欧洲亚洲| 亚洲美女免费视频| 国产盗摄精品一区二区三区在线| 欧美男人的天堂一二区| 国产精品免费网站在线观看| 蜜臀a∨国产成人精品| 在线视频国内自拍亚洲视频| 中文字幕欧美三区| 久久精品国产亚洲高清剧情介绍| 色综合天天综合网国产成人综合天| 欧美电视剧在线观看完整版| 亚洲一区二区五区| 99久久777色| 国产精品欧美精品| 激情欧美日韩一区二区| 欧美一区二区三区在线观看| 亚洲国产日韩综合久久精品| 91丨九色porny丨蝌蚪| 国产精品欧美极品| 国内成+人亚洲+欧美+综合在线 | 欧美色综合久久| 椎名由奈av一区二区三区| 国产成人免费视频网站| 精品国产一区二区三区四区四 | 欧美系列日韩一区| 亚洲婷婷在线视频| 成人h精品动漫一区二区三区| 精品国产91乱码一区二区三区| 日本v片在线高清不卡在线观看| 欧美性色综合网| 亚洲一区二区三区中文字幕| 色综合久久天天| 亚洲天堂网中文字| 91在线国产观看| 亚洲色图另类专区| 91浏览器在线视频| 亚洲乱码精品一二三四区日韩在线| 99久久久无码国产精品| 亚洲欧美一区二区久久| 91麻豆精品秘密| 亚洲综合丝袜美腿| 欧美色图在线观看| 亚洲高清在线视频| 欧美一区二区久久| 蜜臀久久久久久久| 久久综合国产精品| 国产河南妇女毛片精品久久久| 国产精品乱子久久久久| 91麻豆国产香蕉久久精品| 亚洲国产精品久久不卡毛片 | 色噜噜狠狠色综合中国| 亚洲一区在线免费观看| 在线电影院国产精品| 秋霞电影网一区二区| 26uuuu精品一区二区| 国产91丝袜在线播放0| 亚洲桃色在线一区| 欧美日韩视频第一区| 轻轻草成人在线| 亚洲国产成人午夜在线一区| 91国模大尺度私拍在线视频| 亚洲va欧美va天堂v国产综合| 日韩免费成人网| 成人精品国产福利| 亚洲一区二区三区自拍| 亚洲精品在线网站| 色综合中文字幕国产| 免费看精品久久片| 欧美国产激情一区二区三区蜜月|