版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單片機(jī)應(yīng)用系統(tǒng)綜合設(shè)計(jì)10介紹幾個(gè)綜合設(shè)計(jì)案例,通過案例的分析,了解單片機(jī)應(yīng)用系統(tǒng)設(shè)計(jì)的步驟和方法。10單片機(jī)應(yīng)用系統(tǒng)綜合設(shè)計(jì)01步進(jìn)電機(jī)控制器設(shè)計(jì)02直流電機(jī)控制器設(shè)計(jì)03基于DS1302的電子鐘設(shè)計(jì)04智能循跡避障車設(shè)計(jì)05遙控機(jī)器人設(shè)計(jì)步進(jìn)電機(jī)控制器仿真實(shí)例10.1介紹步進(jìn)電機(jī)的使用方法。任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。步進(jìn)電機(jī):28BYJ-48永磁式減速步進(jìn)電機(jī)驅(qū)動(dòng):UNL2003反向驅(qū)動(dòng)器采用3個(gè)按鍵實(shí)現(xiàn)電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和停止步進(jìn)電機(jī)控制器仿真實(shí)例10.1介紹步進(jìn)電機(jī)的使用方法。任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。一、步進(jìn)電機(jī)簡介二、硬件電路設(shè)計(jì)三、軟件設(shè)計(jì)四、仿真一、步進(jìn)電機(jī)簡介步進(jìn)電機(jī)是將脈沖信號轉(zhuǎn)變?yōu)榻俏灰苹蚓€位移的開環(huán)控制元件。相數(shù):電機(jī)內(nèi)部的線圈組數(shù)。步距角:控制系統(tǒng)每發(fā)一個(gè)脈沖信號,電機(jī)所轉(zhuǎn)動(dòng)的角度。拍數(shù):完成一個(gè)磁場周期性變化所需脈沖數(shù)或?qū)щ姞顟B(tài)。勵(lì)磁方式一相勵(lì)磁:每一瞬間只有一組線圈導(dǎo)通步距角:360°/(8*4)=11.25°齒距角:45°4相4拍齒距角:一個(gè)磁場周期,電機(jī)所轉(zhuǎn)動(dòng)的角度。轉(zhuǎn)一圈需要:32拍(32個(gè)脈沖)一、步進(jìn)電機(jī)簡介步距角:360°/(8*4)=11.25°齒距角:45°二相勵(lì)磁:每一瞬間有兩組線圈同時(shí)導(dǎo)通一-二相勵(lì)磁:每一瞬間一相勵(lì)磁與二相勵(lì)磁交替導(dǎo)通步距角:360°/(8*8)=5.625°齒距角:45°轉(zhuǎn)一圈需要:8*8=64拍(64個(gè)脈沖)一、步進(jìn)電機(jī)簡介減速比:例1:64,電機(jī)殼里邊的部分轉(zhuǎn)64圈,電機(jī)殼外邊的部分轉(zhuǎn)1圈。節(jié)拍刷新時(shí)間:步進(jìn)電機(jī)每2拍之間需要一定的時(shí)間。定位:通過控制脈沖個(gè)數(shù)來控制角位移量,從而達(dá)到準(zhǔn)確定位的目的;調(diào)速:通過控制脈沖頻率來控制電機(jī)轉(zhuǎn)動(dòng)的速度和加速度,從而達(dá)到調(diào)速的目的。啟動(dòng)頻率:P.P.S(每秒脈沖數(shù))每秒給出550個(gè)脈沖的情況下電機(jī)可以正常啟動(dòng)。節(jié)拍刷新時(shí)間計(jì)算:控制節(jié)拍刷新時(shí)間大于1.8ms就可以了。1s/550=1.8ms。實(shí)際電機(jī)轉(zhuǎn)動(dòng)一圈需要的拍數(shù)轉(zhuǎn)子轉(zhuǎn)64圈,輸出軸才會(huì)轉(zhuǎn)一圈轉(zhuǎn)子轉(zhuǎn)一圈需要64個(gè)節(jié)拍(4相8拍)電機(jī)轉(zhuǎn)一圈:64*64=4096個(gè)節(jié)拍步距角:360°/(64*64)=5.625°/64約為0.08789°一、步進(jìn)電機(jī)簡介轉(zhuǎn)動(dòng)任意角度步距角:360°/(64*64)=5.625°/64【例10-1】
電機(jī)轉(zhuǎn)過90°,則需要的拍數(shù)為多少?
【解】
注意:在實(shí)際運(yùn)行中,轉(zhuǎn)動(dòng)的角度會(huì)有一些誤差。在沒有精密儀器的情況下很難測量出誤差。但可以采用多轉(zhuǎn)幾圈的方式進(jìn)行測試。!單片機(jī)的I/O口電流驅(qū)動(dòng)能力有限,無法直接驅(qū)動(dòng)步進(jìn)電機(jī)??梢赃x用專用的電機(jī)驅(qū)動(dòng)模塊,如L298N、FT5754等;還可采用三極管驅(qū)動(dòng)電路、ULN2003驅(qū)動(dòng)電路等。步進(jìn)電機(jī)的驅(qū)動(dòng)二
、硬件電路設(shè)計(jì)任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。1~7輸入端16~10輸出端9公共端接感性負(fù)載(電機(jī)、電感等)該腳接電源正極;接非感性負(fù)載(燈泡、電阻、電容等),該腳不接。UNL2003是反向驅(qū)動(dòng)器:內(nèi)含7個(gè)獨(dú)立的達(dá)林頓管MOTOR-STEPPER(單極性步進(jìn)電機(jī),代替28BYJ-48)三、
軟件設(shè)計(jì)任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。按鍵處理:用flag標(biāo)記哪一個(gè)按鍵按下,根據(jù)flag標(biāo)志實(shí)現(xiàn)電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)和停止。
用flagmotor做為電機(jī)正反轉(zhuǎn)的標(biāo)志位。voidkeyscan()
{key1=1;
if(key1==0)//
{
delay(10);//延時(shí)去抖
if(key1==0)
{
flag=1;//正轉(zhuǎn)按鍵按下
}
while(!key1);//松手檢測
}
key2=1;
if(key2==0)//{
delay(10);//延時(shí)去抖
if(key2==0)
{
flag=2;//反轉(zhuǎn)按鍵按下
}
while(!key2);//松手檢測
}key3=1;if(key3==0)//
{
delay(10);//延時(shí)去抖
if(key3==0)
{
flag=3;//停止按鍵按下
}while(!key3);//松手檢測
}
}
while(1)
{keyscan();switch(flag)
{case1:TR0=1;
flagmotor=1;//正轉(zhuǎn)1拍
break;
case2:TR0=1;
flagmotor=2;//反轉(zhuǎn)1拍
break;
case3:stop();break;
default:stop();break;
}
}voiddelay(uintz){uintx,y;for(x=112;x>0;x--)for(y=z;y>0;y--);}
三、
軟件設(shè)計(jì)任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。ucharcodeforturn[]={0x01,0x03,0x02,0x06,0x04,0x0c,0c08,0x09};//正轉(zhuǎn)正轉(zhuǎn)反轉(zhuǎn)ucharcoderevturn[]={0x09,0c08,0x0c,0x04,0x06,0x02,0x03,0x01};//反轉(zhuǎn)for(j=0;j<8;j++){
P2=forturn[j];delay(35);//仿真}
for(j=0;j<8;j++){P2=revturn[j];delay(35);//仿真}
P2=0x00;正轉(zhuǎn)反轉(zhuǎn)停止三、
軟件設(shè)計(jì)任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。步進(jìn)電機(jī)的正反轉(zhuǎn)測試程序ucharcodeforturn[]={0x01,0x03,0x02,0x06,0x04,0x0c,0c08,0x09};//正轉(zhuǎn)ucharcoderevturn[]={0x09,0c08,0x0c,0x04,0x06,0x02,0x03,0x01};//反轉(zhuǎn)
電機(jī)每轉(zhuǎn)動(dòng)一拍需要2ms時(shí)間(仿真中是35ms以上),轉(zhuǎn)動(dòng)一周就需要8192ms,在電機(jī)轉(zhuǎn)動(dòng)程序中用了大量的軟件延時(shí),CPU的執(zhí)行效率不高。
設(shè)計(jì)思路:定時(shí)2ms,中斷函數(shù)中刷新步進(jìn)電機(jī)節(jié)拍,達(dá)到指定的角度后關(guān)閉中斷。voidT0time_init(){TMOD=0x01;//采用T0,方式1TH0=(65536-50000)/256;//實(shí)際定時(shí)2msTL0=(65536-50000)%256;ET0=1;EA=1;TR0=0;}
voidT0timeInterrupt()interrupt1{TH0=(65536-50000)/256;//實(shí)際定時(shí)2msTL0=(65536-50000)%256;if(flagmotor==1)motor_forturn_one();//正轉(zhuǎn)1拍if(flagmotor==2)motor_return_one();//反轉(zhuǎn)1拍}
voidmotor_forturn_one(){
beats--;//需要轉(zhuǎn)動(dòng)的總拍數(shù)temp=P2;//讀電機(jī)數(shù)據(jù)
temp=temp&0xf0;//清零低四位
temp=temp|forturn[index];//拼接
P2=temp;//送回P2index++;//節(jié)拍索引遞增
if(index==0x08)index=0;//四相八拍
if(beats==0)
{
P2=P2&0xF0;//電機(jī)轉(zhuǎn)過指定的角度TR0=0;//T0停止定時(shí)
flag=0;//按鍵標(biāo)志位清零index=0;//拍數(shù)索引清零
flagmotor=0;//正反轉(zhuǎn)標(biāo)志位清零
angle=motorturns*360;//角度復(fù)位
beats=(angle*4096)/360;//拍數(shù)復(fù)位
}}
三、
軟件設(shè)計(jì)任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。voidmotor_return_one(){
beats--;//需要轉(zhuǎn)動(dòng)的總拍數(shù)temp=P2;//讀電機(jī)數(shù)據(jù),低四位
temp=temp&0xf0;//清零低四位
temp=temp|revturn[index];//拼接
P2=temp;//送回P2index++;//節(jié)拍索引遞增
if(index==0x08)index=0;//四相八拍
if(beats==0)
{
P2=P2&0xF0;//電機(jī)轉(zhuǎn)過指定的角度TR0=0;//T0停止定時(shí)
flag=0;//按鍵標(biāo)志位清零index=0;//拍數(shù)索引清零
flagmotor=0;//正反轉(zhuǎn)標(biāo)志位清零
angle=motorturns*360;//角度復(fù)位
beats=(angle*4096)/360;//拍數(shù)復(fù)位
}}
ucharcodeforturn[]={0x01,0x03,0x02,0x06,0x04,0x0c,0c08,0x09};//正轉(zhuǎn)ucharcoderevturn[]={0x09,0c08,0x0c,0x04,0x06,0x02,0x03,0x01};//反轉(zhuǎn)voidstop(void){
P2=P2&0xF0;}#include<reg52.h>#defineucharunsignedchar#defineuintunsignedintsbitkey1=P3^3; //正轉(zhuǎn)按鍵sbitkey2=P3^4; //反轉(zhuǎn)按鍵sbitkey3=P3^5; //停止按鍵unsignedlongbeats=0;//轉(zhuǎn)動(dòng)總拍數(shù)變量unsignedlongangle=0;//需要轉(zhuǎn)動(dòng)的角度ucharcodeforturn[]={0x01,0x03,0x02,0x06,
0x04,0x0c,0x08,0x09};//正轉(zhuǎn)拍ucharcoderevturn[]={0x09,0x08,0x0c,0x04,
0x06,0x02,0x03,0x01};//反轉(zhuǎn)拍ucharflag=0; //按鍵標(biāo)志位ucharflagmotor=0;//正反轉(zhuǎn)標(biāo)記uchartemp;//臨時(shí)變量ucharindex=0;//拍數(shù)索引ucharmotorturns=0;//電機(jī)轉(zhuǎn)動(dòng)圈數(shù)voidT0time_init();//定時(shí)器T0初始化函數(shù)voidmotor_forturn_one();//正轉(zhuǎn)voidmotor_return_one();//電機(jī)voidstop(void);//電機(jī)停止voiddelay(uintz);voidkeyscan();//按鍵掃描voidmain(void)
{motorturns=1;//轉(zhuǎn)動(dòng)一圈
angle=motorturns*360;//轉(zhuǎn)換成角度
beats=(angle*4096)/360;//計(jì)算拍數(shù)
T0time_init();while(1)
{keyscan();switch(flag)
{case1:{TR0=1;flagmotor=1;}break;
case2:{TR0=1;flagmotor=2;}break;
case3:stop();break;
default:stop();break;
}
}}四、仿真1在KeilC中編寫、編譯代碼,生成hex文件。任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。四、仿真2在Preteus中繪制電路圖,加載hex文件運(yùn)行。任務(wù)要求:設(shè)計(jì)步進(jìn)電機(jī)控制器,通過按鍵控制電機(jī)的正轉(zhuǎn)、反轉(zhuǎn)、停止。10單片機(jī)應(yīng)用系統(tǒng)綜合設(shè)計(jì)01步進(jìn)電機(jī)控制器設(shè)計(jì)02直流電機(jī)控制器設(shè)計(jì)03基于DS1302的電子鐘設(shè)計(jì)04智能循跡避障車設(shè)計(jì)05遙控機(jī)器人設(shè)計(jì)溫控直流電機(jī)的PWM調(diào)速控制器10.2.3介紹直流電機(jī)的使用方法。任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。溫控直流電機(jī)的PWM調(diào)速控制器10.2.3介紹直流電機(jī)的使用方法。任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。一、直流電機(jī)簡介二、硬件電路設(shè)計(jì)三、軟件設(shè)計(jì)四、仿真一、直流電機(jī)簡介電機(jī)是把電能轉(zhuǎn)換成機(jī)械能的裝置。在換向器的AB兩端上加上一個(gè)上正下負(fù)的直流電壓,電流由a到b,由c到d。根據(jù)左手定則,ab段在自上而下的磁力線作用下,向左移動(dòng),cd段向右移動(dòng)。在這兩個(gè)力的作用下,abcd電樞開始逆時(shí)針旋轉(zhuǎn),因?yàn)閾Q向器和電樞固定在一起,它也跟著轉(zhuǎn)動(dòng)。如果把AB兩端的電壓方向反過來,電樞將順時(shí)針旋轉(zhuǎn)。電機(jī)轉(zhuǎn)動(dòng):電機(jī)兩輸入端,加高低電平電機(jī)PWM調(diào)速:
在一個(gè)周期內(nèi)的導(dǎo)通時(shí)間為t,周期為T,則電機(jī)兩端的平均電壓為
電機(jī)的轉(zhuǎn)速與電機(jī)兩端的電壓成比例,電機(jī)兩端電壓和占空比成正比,因此,電壓的轉(zhuǎn)速就和占空比成正比,占空比越大,電機(jī)轉(zhuǎn)得越快。二
、硬件電路設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。三、
軟件設(shè)計(jì)多.C文件編程:分成6部分①DS18B20.c和DS18B20.h②LCD1602.c和LCD1602.h③keyscan.c和keyscan.h④T0_PWM.c和T0_PWM.h⑤delay.c和delay.h任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。main.c三、
軟件設(shè)計(jì)①DS18B20.c和DS18B20.h(詳見9.1.3)任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。#include<DS18B20.h>bitflag=0;uintTemperature=0;bitinit_DS18B20() //DS18B20初始化{函數(shù)體略}voidDS18B20_WR_CHAR(ucharbyte) {函數(shù)體略}ucharDS18B20_RD_CHAR() {函數(shù)體略}voidDS18B20_Temperature(){函數(shù)體略}#ifndefDS18B20_H_#defineDS18B20_H_#include<reg52.h>#include<delay.h>sbitDQ=P1^7;//DS18B20數(shù)據(jù)端externuintTemperature;externbitflag;bitinit_DS18B20(); //DS18B20初始化voidDS18B20_WR_CHAR(ucharbyte); //寫字節(jié)ucharDS18B20_RD_CHAR(); //讀字節(jié)voidDS18B20_Temperature();//溫度處理函數(shù)#endifDS18B20.cDS18B20.h三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。②LCD1602.c和LCD1602.h(詳見3.5)#include<LCD1602.h>voidLCD_init()//LCD初始化{函數(shù)體略}voidwrite_cmd(charcmd)//寫指令{函數(shù)體略}voidwrite_data(uchardat)//寫數(shù)據(jù){函數(shù)體略}voidwrite_str(uchar*str)//寫字符串{函數(shù)體略}#ifndefLCD1602_H_#defineLCD1602_H_#include<reg52.h>#include<delay.h>#defineOUTP2//LCD1602數(shù)據(jù)端sbitlcdrs=P1^0;//LCD1602命令數(shù)據(jù)控制端sbitlcdrw=P1^1;//LCD1602讀寫端sbitlcden=P1^2;//LCD1602使能端voidLCD_init();//LCD1602初始化voidwrite_cmd(ucharcmd);//寫指令函數(shù)voidwrite_data(uchardat);//寫數(shù)據(jù)函數(shù)voidwrite_str(uchar*str);//寫字符串函數(shù)#endifLCD1602.cLCD1602.h任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。voiddisplayLCD(){if(flag==0)//檢測到flag=0,說明DS18B20存在
{
DS18B20_Temperature();//讀取轉(zhuǎn)換后的溫度值
write_cmd(0x80);//第1行顯示溫度write_str("Tem:");write_data((Temperature/100)%10+48);//顯示溫度
write_data((Temperature/10)%10+48);write_data('.');write_data(Temperature%10+48);write_data(0xdf);//顯示°write_data('C');
write_cmd(0xc0);//第2行顯示速度等級write_str("speed:");write_data(num_show+48);//顯示速度等級
}}main.c③keyscan.c和keyscan.h/**keyscan.h**/#ifndefkeyscan_H_#definekeyscan_H_#include<reg52.h>voidex_init();//外部中斷初始化#endif/**keyscan.c**/#include<keyscan.h>externunsignedcharnum;externunsignedintTemperature;voidex_init()//外部中斷0、1初始化函數(shù){
EX0=1;IT0=1;//外部中斷0下跳沿觸發(fā)
EX1=1;IT1=1;//外部中斷1下跳沿觸發(fā)
EA=1; //使能中斷總開關(guān)}voidkey1()interrupt0//外部中斷0中斷函數(shù){TR0=0;num++;//按下一次按鍵,num加一
if(num==5)
num=4;//速度最大4,再按按鍵則保持
IE0=0;//清外部中斷0下標(biāo)志位
if(Temperature/10>=25)TR0=0;elseTR0=1;}voidkey2()interrupt2//外部中斷1
{TR0=0;if(num!=0)num--;//按下一次按鍵,num減1
elsenum=0;//速度達(dá)到0,再按則保持
IE1=0;//清外部中斷1下標(biāo)志位
if(Temperature/10>=25)
TR0=0;elseTR0=1;}任務(wù)要求:1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按
鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。任務(wù)要求:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。/**T0_PWM.h**/#ifndefT0_PWM_H_#defineT0_PWM_H_#include<reg52.h>sbitIN1=P1^3;//電機(jī)引腳sbitIN2=P1^4;//電機(jī)引腳sbitENA=P1^5;//電機(jī)使能端externunsignedcharflag_PWM;externunsignedcharHigh_num;
voidT0_init();//T0初始化函數(shù)#endif/**
T0_PWM.c**/#include<T0_PWM.h>#include<reg52.h>ucharflag_PWM=0;//T0中斷次數(shù)標(biāo)志位voidT0_init()//T0初始化函數(shù)
{TMOD=0x01;//T0方式1,一次定時(shí)時(shí)間為1ms
TH0=(65536-1000)/256;
TL0=(65536-1000)%256;
ET0=1;//T0中斷允許
EA=1;//使能中斷總開關(guān)
TR0=0;//不啟動(dòng)T0}voidT0_it()interrupt1//T0中斷函數(shù){TH0=(65536-1000)/256;TL0=(65536-1000)%256;
flag_PWM++;//1ms中斷1次,flag_PWM加一
if(flag_PWM>=50){flag_PWM=0;}//周期50ms
if(flag_PWM<High_num)//flag_PWM<High_num
ENA=1;//使能電機(jī)ENAelse
ENA=0;
}
PWM波產(chǎn)生:T0定時(shí)器定時(shí)1ms,T=50msHign_num=5Hign_num=15Hign_num=25Hign_num=35flag_PWM累計(jì)進(jìn)入中斷的次數(shù)三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。⑤delay.c和delay.h#ifndefDELAY_H_#defineDELAY_H_#defineucharunsignedchar#defineuintunsignedintvoiddelay(uintz);//延時(shí)函數(shù)#endifdelay.h#include<delay.h>voiddelay(uintz)//延時(shí)函數(shù){
uintx,y;
for(x=112;x>0;x--)
for(y=z;y>0;y--);}delay.cdisplayLCD();switch(num)
{
case1:num_show=1;High_num=5;break;
case2:num_show=2;High_num=15;break;case3:num_show=3;High_num=25;break;case4:num_show=4;High_num=35;break;
default:num_show=0;High_num=0;break;
} if(Temperature/10>=25){TR0=0;//溫度大于25°,T0停止定時(shí)
ENA=1;
IN1=1;
//電機(jī)停止IN2=1;
//電機(jī)停止}
}}#include<LCD1602.h>#include<DS18b20.h>#include<T0_PWM.h>#include<keyscan.h>uintTemperature;//當(dāng)前溫度變量ucharnum=0;//按鍵按下次數(shù)標(biāo)志位ucharnum_show=0;//電機(jī)速度等級ucharHigh_num=0;//設(shè)置占空比bitflag;//DS18B20是否有效標(biāo)志位voiddisplayLCD();//液晶顯示函數(shù)voidmain(){T0_init();//定時(shí)器T0初始化
ex_init();//外部中斷1、2初始化
LCD_init();//LCD1602初始化
ENA=0;//電機(jī)不使能
IN1=1;//電機(jī)正轉(zhuǎn)
IN2=0;//電機(jī)正轉(zhuǎn)while(1){
main.c四、仿真1在KeilC中編寫、編譯代碼,生成hex文件。任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。四、仿真2在Preteus中繪制電路圖,加載hex文件運(yùn)行。任務(wù)要求:采用單片機(jī)設(shè)計(jì)直流電機(jī)PWM調(diào)速控制器,功能為:
1)采用按鍵控制PWM調(diào)速等級,等級設(shè)為4個(gè)。
2)當(dāng)溫度超過25°,電機(jī)停止。此時(shí),按按鍵無法啟動(dòng)電機(jī),
當(dāng)溫度低于25°,則可通過按鍵啟動(dòng)電機(jī)。
3)液晶顯示溫度和速度等級。直流電機(jī)轉(zhuǎn)速測量仿真實(shí)例10.2.4介紹直流電機(jī)轉(zhuǎn)速的測量方法。任務(wù)要求:采用單片機(jī)測量直流電機(jī)的轉(zhuǎn)速并在液晶上顯示。一、硬件電路設(shè)計(jì)二、軟件設(shè)計(jì)三、仿真一
、硬件電路設(shè)計(jì)任務(wù)要求:采用單片機(jī)測量直流電機(jī)的轉(zhuǎn)速并在液晶上顯示。直流電機(jī)的轉(zhuǎn)速通過光電管轉(zhuǎn)換成了脈沖信號;光電管產(chǎn)生的脈沖信號在仿真中用直流脈沖源DCLK代替。測量方法:測量每秒鐘的脈沖個(gè)數(shù)就可測出電機(jī)的轉(zhuǎn)速定時(shí)器T1定時(shí)1s外部中斷1(P3.3):中斷服務(wù)程序中累計(jì)脈沖個(gè)數(shù)測速碼盤二、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)測量直流電機(jī)的轉(zhuǎn)速并在液晶上顯示。(1)外部中斷1(P3.3)引腳接收脈沖信號,下跳沿觸發(fā),每來一個(gè)脈沖,在中斷服務(wù)函數(shù)中,累計(jì)一次。/**外部中斷1初始化**/voidEX_init(){IT1=1;//下跳沿觸發(fā)
EX1=1;//啟動(dòng)T1EA=1;//開總中斷
}/**外部中斷1中斷函數(shù)**/voidEX1_ISR()interrupt2{num++;//累計(jì)脈沖個(gè)數(shù)
}二、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)測量直流電機(jī)的轉(zhuǎn)速并在液晶上顯示。(2)定時(shí)器1s的定時(shí)
采用定時(shí)器T1,方式1,一次定時(shí)時(shí)間為50ms。定時(shí)器溢出一次為50ms,溢出20次為1s。/**T1中斷服務(wù)函數(shù)**/voidTimer1_ISR()interrupt3
{staticcharj=0;EX1=0;TH1=(65536-50000)/256;TL1=(65536-50000)%256;j++;if(j==20){j=0;
speednum=num;//1s讀外部中斷1累計(jì)numnum=0;}EX1=1;
}/**T0中斷初始化***/voidT1_init(){TMOD=0x10;//T1定時(shí),方式1TH1=(65536-50000)/256;//定時(shí)50msTL1=(65536-50000)%256;ET1=1; //開T1中斷EA=1; //開總中斷TR1=1; //啟動(dòng)T1}任務(wù)要求:采用單片機(jī)測量直流電機(jī)的轉(zhuǎn)速并在液晶上顯示。(3)轉(zhuǎn)速的顯示
將speednum其拆分成個(gè)十百千位顯示在LCD上。#include<reg52.h>#include<intrins.h>#defineucharunsignedchar#defineuintunsignedint#defineoutP2//液晶的數(shù)據(jù)端口sbitlcdrs=P3^0;//液晶的RS端接P3.0口sbitlcdrw=P3^1;//液晶的RW端接P3.1sbitlcden=P3^2;//液晶的EN使能端接P3.2口uintnum=0;//外部中斷函數(shù)中累計(jì)脈沖個(gè)數(shù)uintspeednum=0;//1s中讀取的脈沖個(gè)數(shù)voidmain(){
lcd_init();
EX_T0_init();
while(1)
{
write_cmd(0x80+0x00);//第1行
write_str("DCspeed:");
write_cmd(0x80+0x09);//第二行
write_data((speednum/1000)%10+48);//千位
write_data((speednum/100)%10+48);//百位
write_data((speednum/10)%10+48);
//十位
write_data(speednum%10+48);
//個(gè)位
}}四、仿真1在KeilC中編寫、編譯代碼,生成hex文件。任務(wù)要求:采用單片機(jī)測量直流電機(jī)的轉(zhuǎn)速并在液晶上顯示。四、仿真2在Preteus中繪制電路圖,加載hex文件運(yùn)行。任務(wù)要求:采用單片機(jī)測量直流電機(jī)的轉(zhuǎn)速并在液晶上顯示。10單片機(jī)應(yīng)用系統(tǒng)綜合設(shè)計(jì)01步進(jìn)電機(jī)控制器設(shè)計(jì)02直流電機(jī)控制器設(shè)計(jì)03基于DS1302的電子鐘設(shè)計(jì)04智能循跡避障車設(shè)計(jì)05遙控機(jī)器人設(shè)計(jì)基于DS1302的電子鐘仿真實(shí)例10.3介紹DS1302的使用方法。任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:
1)液晶顯示器上顯示當(dāng)前時(shí)間;
2)通過按鍵校準(zhǔn);
3)設(shè)置鬧鐘功能。基于DS1302的電子鐘仿真實(shí)例10.3介紹時(shí)鐘芯片DS1302的使用方法。任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:
1)液晶顯示器上顯示當(dāng)前時(shí)間;
2)通過按鍵校準(zhǔn);
3)設(shè)置鬧鐘功能。一、DS1302簡介二、硬件電路設(shè)計(jì)三、軟件設(shè)計(jì)四、仿真一、DS1302簡介DS1302包含一個(gè)RTC/日歷,提供秒、分、時(shí)、日、月、星期和年等信息,對于少于31天的月份,月末日期會(huì)自動(dòng)調(diào)整,包括對閏年的修正。通過配置AM/PM標(biāo)志決定采用24小時(shí)格式或12小時(shí)格式。有效補(bǔ)償?shù)?100年。31個(gè)字節(jié)的8位數(shù)據(jù)靜態(tài)RAM??梢援?dāng)做外擴(kuò)的E2PROM一樣使用來存儲數(shù)據(jù)。與單片機(jī)的連接一、DS1302簡介DS1302寫時(shí)序時(shí)序:RST=1,CLK上升沿,I/O口的地址數(shù)據(jù)寫入DS1302,8個(gè)脈沖后的上升沿開始寫入數(shù)據(jù),8個(gè)脈沖后,RST=0。寫入數(shù)據(jù)需2個(gè)字節(jié)完成:第一個(gè)字節(jié)由單片機(jī)向DS1302寫入地址信息,第二個(gè)字節(jié)單片機(jī)寫入內(nèi)容。voidWrite_Ds1302_Byte(uchartemp){uchari;
for(i=0;i<8;i++)//寫一個(gè)字節(jié)
{
DAT=temp&0x01;//獲取低位數(shù)據(jù)
temp>>=1;//右移一位CLK=1;//上升沿讀數(shù)據(jù)
CLK=0;
}}voidWrite_Ds1302(ucharaddress,uchardat){
RST=0;
CLK=0;
RST=1;
Write_Ds1302_Byte(address);//發(fā)送地址
Write_Ds1302_Byte(dat); //發(fā)送數(shù)據(jù)
RST=0;//恢復(fù)}sbitRST=P1^5;//CEsbitCLK=P1^6;//SCLKsbitDAT=P1^7;//I/O一、DS1302簡介設(shè)置日歷時(shí)間命令字(寫操作)秒寄存器的地址A4~A0的值為00000【例】設(shè)置秒寄存器的初始值的命令字給秒寄存器寫入初值55秒的代碼為:Write_Ds1302(0x80,0x55);【例】設(shè)置DS1302秒,分,時(shí),日,月,星期,年的命令字地址信息(命令字)格式codeucharwrite_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//寫時(shí)間命令字【例10-3】
給DS1302寫入初始時(shí)間為2021年7月13日6時(shí)59分55秒、星期二。voidSet_RTC(uchar*ptimer) //寫入初始時(shí)間{
uchari,*p;
Write_Ds1302(0x8E,0x00); //打開寫允許
p=write_rtc_address;
//取命令字首地址
for(i=0;i<7;i++)
{
Write_Ds1302(*p,ptimer[i]);//寫入秒分時(shí)日月星期年
p++;
}
Write_Ds1302(0x8E,0x80); //關(guān)閉寫允許}/**********初值為55秒59分6時(shí)13日7月,星期二,2021年**********/
Set_RTC(init_timer);WP=0允許寫入
(0x00)
WP=1禁止寫入(0x80)10001110秒
分
時(shí)
日
月
星期
年
ucharinit_timer[7]={0x55,0x59,0x06,0x13,0x07,0x02,0x21};//秒分時(shí)日月星期年DS1302讀時(shí)序時(shí)序:RST=1;SCLK的上升沿;I/O口的1位地址數(shù)據(jù)寫入DS1302;8個(gè)脈沖后的下降沿開始讀取數(shù)據(jù),讀取I/O口的1位數(shù)據(jù);SCLK=1;RST=0;讀數(shù)據(jù)需2個(gè)字節(jié)完成:第一個(gè)字節(jié)由單片機(jī)向DS1302寫入地址信息,第二個(gè)字節(jié)單片機(jī)讀取該地址里的內(nèi)容ucharRead_Ds1302(ucharaddress){
uchari,temp=0x00;
RST=0;
CLK=0;
RST=1;
Write_Ds1302_Byte(address);//寫入地址
for(i=0;i<8;i++)
{
temp>>=1;//右移一位
if(DAT)
temp|=0x80;//低位在前高位在后CLK=1;//下降沿讀數(shù)據(jù)CLK=0;
}
RST=0;DAT=0;return(temp);}一、DS1302簡介讀DS1302當(dāng)前時(shí)間命令字(讀操作)秒寄存器的地址A4~A0的值為00000【例】讀秒寄存器的值的命令字讀秒寄存器的代碼為:Read_Ds1302(0x81);【例】讀取DS1302的實(shí)時(shí)時(shí)間(秒,分,時(shí),日,月,星期,年)的函數(shù)地址信息(命令字)格式一、DS1302簡介/**********讀秒,分,時(shí),日,星期,月,年***********/voidRead_RTC(uchar*ptimer)//讀取日歷時(shí)間{ unsignedchari,*p;
p=read_rtc_address;//讀地址
for(i=0;i<7;i++) //分7次讀取秒,分,時(shí),日,月,星期,年
{
ptimer[i]=Read_Ds1302(*p);
p++; }}codeucharread_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//讀當(dāng)前時(shí)間命令字Read_RTC(r_timer);【例】
獲取DS1302的實(shí)時(shí)時(shí)間(秒,分,時(shí),日,月,星期,年)的函數(shù)ucharr_timer[7];二
、硬件電路設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:(1)液晶顯示時(shí)間;(2)通過按鍵校時(shí)功能;(3)設(shè)置鬧鐘功能。三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:(1)液晶顯示時(shí)間;(2)通過按鍵校時(shí)功能;(3)設(shè)置鬧鐘功能。多.C文件編程:分成5部分①delay.c和delay.h②LCD1602.c和LCD1602.h③DS1302.c和DS1302.h④key.c和key.h
⑤main.c三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:(1)液晶顯示時(shí)間;(2)通過按鍵校時(shí)功能;(3)設(shè)置鬧鐘功能。①delay.c和delay.h#ifndefDELAY_H_#defineDELAY_H_#defineucharunsignedchar#defineuintunsignedintvoiddelay(uintz);//延時(shí)函數(shù)#endifdelay.h#include<delay.h>voiddelay(uintz)//延時(shí)函數(shù){
uintx,y;
for(x=112;x>0;x--)
for(y=z;y>0;y--);}delay.c三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:(1)液晶顯示時(shí)間;(2)通過按鍵校時(shí)功能;(3)設(shè)置鬧鐘功能。②LCD1602.c和LCD1602.h(詳見3.5)#include<LCD1602.h>voidLCD_init()//LCD初始化{函數(shù)體略}voidwrite_cmd(charcmd)//寫指令{函數(shù)體略}voidwrite_data(uchardat)//寫數(shù)據(jù){函數(shù)體略}voidwrite_str(uchar*str)//寫字符串{函數(shù)體略}#ifndefLCD1602_H_#defineLCD1602_H_#include<reg52.h>#include<delay.h>#defineOUTP2//LCD1602數(shù)據(jù)端sbitlcdrs=P1^0;//LCD1602命令數(shù)據(jù)控制端sbitlcdrw=P1^1;//LCD1602讀寫端sbitlcden=P1^2;//LCD1602使能端voidLCD_init();//LCD1602初始化voidwrite_cmd(ucharcmd);//寫指令函數(shù)voidwrite_data(uchardat);//寫數(shù)據(jù)函數(shù)voidwrite_str(uchar*str);//寫字符串函數(shù)#endifLCD1602.cLCD1602.h三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:(1)液晶顯示時(shí)間;(2)通過按鍵校時(shí)功能;(3)設(shè)置鬧鐘功能。#include<ds1302.h>#include<key.h>codeucharwrite_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c};//寫時(shí)間信息地址codeucharread_rtc_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};//讀時(shí)間信息地址voidWrite_Ds1302_Byte(uchartemp)//向DS1302寫入字節(jié){函數(shù)體略}voidWrite_Ds1302(ucharaddress,uchardat)//向DS1302寫入數(shù)據(jù){函數(shù)體略}ucharRead_Ds1302(ucharaddress)//從DS1302讀出數(shù)據(jù){函數(shù)體略}voidRead_RTC(uchar*ptimer) //讀取日歷時(shí)間{函數(shù)體略}voidSet_RTC(uchar*ptimer) //寫入初始日歷時(shí)間{函數(shù)體略}DS1302.c和DS1302.hDS1302.c三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:(1)液晶顯示時(shí)間;(2)通過按鍵校時(shí)功能;(3)設(shè)置鬧鐘功能。#ifndefds1302_H_#defineds1302_H_#include<reg52.h>#include<delay.h>//DS1302時(shí)鐘芯片引腳定義sbitRST=P1^5;//復(fù)位腳(也叫片選腳)sbitCLK=P1^6;//時(shí)鐘腳sbitDAT=P1^7;//數(shù)據(jù)引腳voidWrite_Ds1302_Byte(uchartemp);//向DS1302寫入字節(jié)voidWrite_Ds1302(ucharaddress,uchardat);//向DS1302寫入數(shù)據(jù)ucharRead_Ds1302(ucharaddress);//從DS1302讀出數(shù)據(jù)voidRead_RTC(uchar*ptimer); //讀取日歷時(shí)間voidSet_RTC(uchar*ptimer); //寫入初始日歷時(shí)間
#endifDS1302.h三、
軟件設(shè)計(jì)任務(wù)要求:采用單片機(jī)設(shè)計(jì)一款簡易電子鐘。具體實(shí)現(xiàn)功能為:(1)液晶顯示時(shí)間;(2)通過按鍵校時(shí)功能;(3)設(shè)置鬧鐘功能。key.c和key.h#ifndefkey_H_#definekey_H_#include<reg52.h>#include<delay.h>sbitk1=P3^2;//第一個(gè)按鍵定義sbitk2=P3^3;//第二個(gè)按鍵定義sbitk3=P3^4;//第三個(gè)按鍵定義 sbitbell=P1^4;//蜂鳴器voidkeyscan();externuintflag1;externintsec,min,hour,day,month,week,year;externcodeucharwrite_rtc_address[7]; externcodeucharread_rtc_address[7];externucharl_timer[7];externucharr_timer[7];#endifkey.hkey.c#include<key.h>#include<LCD1602.h>#include<ds1302.h>uintflag; //標(biāo)志位voidkeyscan()
{
uchari,tmp;
if(k1==0) //k1功能鍵 按下它進(jìn)行調(diào)時(shí)
{
delay(5);//按鍵消除抖動(dòng)判斷
if(k1==0)
{
flag++; //鍵一按下,標(biāo)志位加1 if(flag==6)
{
flag=0;
flag1=0; //清調(diào)整標(biāo)志位
write_cmd(0x0c);//關(guān)光標(biāo)閃爍
} while(!k1);
}
}
switch(flag)
{
case1:write_cmd(0x83);write_cmd(0x0d);break;
case2:write_cmd(0x86);write_cmd(0x0d);break;
case3:write_cmd(0x89);write_cmd(0x0d);break;
case4:write_cmd(0xc1);write_cmd(0x0d);break;
case5:write_cmd(0xc4);write_cmd(0x0d);break;
case6:break;
}key1按鍵用于時(shí)間設(shè)置flag=1:調(diào)整年flag=2:調(diào)整月flag=3:調(diào)整日和星期flag=4:調(diào)整時(shí)flag=5:調(diào)整分秒不用調(diào)節(jié)。0x0d:表示光標(biāo)閃爍if(flag!=0) {
flag1=1;
if(k2==0)
//加鍵
{
delay(5);//按鍵消除抖動(dòng)判斷
if(k2==0) {
while(!k2);
if(flag==1)//當(dāng)標(biāo)志位為1時(shí)說明調(diào)年,按下k2加一
{
year++;
if(year==100)year=0;
write_cmd(0x82);//顯示年在液晶第一行第三格
write_data(year/10+48); //+0x30和+48是一個(gè)意思
write_data(year%10+48);
}
if(flag==2)//2說明調(diào)月,按下k2加一,滿12個(gè)月加一年
{
month++;
if(month==13){month=1;year++;}
write_cmd(0x82);
write_data(year/10+48);
write_data(year%10+48);
write_cmd(0x85);//顯示月在液晶第一行第三格
write_data(month/10+48);
write_data(month%10+48);
}
flag=1:調(diào)整年flag=2:調(diào)整月flag=3:調(diào)整日和星期flag=4:調(diào)整時(shí)flag=5:調(diào)整分秒不用調(diào)節(jié)。if(flag==3) //當(dāng)標(biāo)志位為3時(shí)說明調(diào)日與星期,按下k2加一,滿30天加一月
{
day++;
week++;
if(week==8)week=1;
if(day==31){day=1;month++;}
write_cmd(0x85);
write_data(month/10+48);
write_data(month%10+48);
write_cmd(0x88);
write_data(day/10+48);
write_data(day%10+48);
}
if(flag==4) //當(dāng)標(biāo)志位為4時(shí)說明調(diào)時(shí),按下k2加一,滿24個(gè)小時(shí)加一天
{
hour++;
if(hour==24){hour=0;day++;}
write_cmd(0x88);
write_data(day/10+48);
write_data(day%10+48);
write_cmd(0xc0); //顯示時(shí)在液晶第二行第一格
write_data(hour/10+48);
write_data(hour%10+48);
write_data(0x3a);//顯示:
}
if(flag==5) //當(dāng)標(biāo)志位為5時(shí)說明調(diào)分,按下k2加一,滿60分加一時(shí)
{
min++;
if(min==60){min=0;hour++;}
write_cmd(0xc0);
write_data(hour/10+48);
write_data(hour%10+48);
write_cmd(0xc3);
write_data(min/10+48);
write_data(min%10+48);
write_data(0x3a);//顯示:
}}}flag=1:調(diào)整年flag=2:調(diào)整月flag=3:調(diào)整日和星期flag=4:調(diào)整時(shí)flag=5:調(diào)整分秒不用調(diào)節(jié)。if(k3==0)//減鍵{
delay(5); //按鍵消除抖動(dòng)判斷
if(k3==0)
{
while(!k3);
if(flag==1)//當(dāng)標(biāo)志位為1時(shí)說明調(diào)分,按下k3減一
{
year--;
if(year<0){year=99;}
write_cmd(0x82);
write_data(year/10+48);
write_data(year%10+48);
}
if(flag==2)//當(dāng)標(biāo)志位為2時(shí)說明調(diào)月,按下k3減一
{
month--; if(month==0){month=12;year--;} write_cmd(0x82); write_data(year/10+48); write_data(year%10+48); write_cmd(0x85); write_data(month/10+48); write_data(month%10+48);
}flag=1:調(diào)整年flag=2:調(diào)整月flag=3:調(diào)整日和星期flag=4:調(diào)整時(shí)flag=5:調(diào)整分秒不用調(diào)節(jié)。if(flag==3) //當(dāng)標(biāo)志位為3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年青海高等職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試備考試題含詳細(xì)答案解析
- 2026年甘肅衛(wèi)生職業(yè)學(xué)院單招綜合素質(zhì)考試備考題庫含詳細(xì)答案解析
- 2026年安徽城市管理職業(yè)學(xué)院單招職業(yè)技能考試備考題庫含詳細(xì)答案解析
- 2026年湖南汽車工程職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題及答案詳細(xì)解析
- 2026年鄭州工業(yè)安全職業(yè)學(xué)院單招綜合素質(zhì)筆試備考試題含詳細(xì)答案解析
- 2026年鄭州軌道工程職業(yè)學(xué)院單招職業(yè)技能考試備考題庫含詳細(xì)答案解析
- 2026年棗莊科技職業(yè)學(xué)院單招綜合素質(zhì)考試備考試題含詳細(xì)答案解析
- 2026年甘肅財(cái)貿(mào)職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試備考試題及答案詳細(xì)解析
- 2026年江西現(xiàn)代職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試模擬試題含詳細(xì)答案解析
- 2026年新疆科技職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)筆試模擬試題含詳細(xì)答案解析
- DBJ51-T 040-2021 四川省工程建設(shè)項(xiàng)目招標(biāo)代理操作規(guī)程
- 青鳥消防JBF62E-T1型測溫式電氣火災(zāi)監(jiān)控探測器使用說明書
- 武漢市江岸區(qū)2022-2023學(xué)年七年級上學(xué)期期末地理試題【帶答案】
- 自動(dòng)駕駛系統(tǒng)關(guān)鍵技術(shù)
- 完整工資表模板(帶公式)
- 奇瑞汽車QC小組成果匯報(bào)材料
- 英語四級詞匯表
- 社區(qū)春節(jié)活動(dòng)方案
- CTT2000LM用戶手冊(維護(hù)分冊)
- 川2020J146-TJ 建筑用輕質(zhì)隔墻條板構(gòu)造圖集
- 新員工入職申請表模板
評論
0/150
提交評論