freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于單片機(jī)的pwm信號輸出系統(tǒng)畢業(yè)論文-資料下載頁

2025-06-27 19:51本頁面
  

【正文】 ?正半周結(jié)束 ?P 3 . 0 = 0調(diào)制波大于載波 ?P 3 . 0 = 0負(fù)半周結(jié)束 ?P 3 . 0 = 1P 3 . 1 = 1F L A G = 0 F A G = 1輸出時間到 ?停止輸出是否是否停止輸出是否修改參數(shù)是否否是是否是否是否否是是否圖 14 SPWM 流程圖直流斬波 PWM 和 SPWM 程序流程圖如下:/**********************T0 中斷服務(wù)程序*******************/void timer0(void)interrupt 1 using 1{if(dcac){ tjump=1tjump。if(tjump==0){ TH0=tempt0。//tempt0=(655361000/freq*rac/100)/256。 TL0=tempt1。//tempt1=(655361000/freq*rac/100)%256。 OUTPUT0=1。}if(tjump){ TH0=tempt2。//tempt2=(655361000/freq*(100rac)/100)/256。 TL0=tempt3。//tempt3=(655361000/freq*(100rac)/100)%256。 OUTPUT0=0。}}else{ TH0=tempt0,TL0=tempt1。aci++。if(FLAG){if(sjb[aci]tempt4)OUTPUT0=0。else OUTPUT0=1。}else{ if(sjb[aci]tempt4)OUTPUT1=0。else OUTPUT1=1。}if(aci==31){ aci=0,acj++。tempt4=((long unsigned int)sine[acj])*k/10。if(acj==31)acj=0,OUTPUT0=0,OUTPUT1=0,FLAG=1FLAG。}}}if(tjump){TH0=tempt2。 //tempt2=(655361000/freq*(100rac)/100)/256。 TL0=tempt3。 //tempt3=(655361000/freq*(100rac)/100)%256。 OUTPUT=0。 }} 輸出時間控制這里我們用定時器 1,同樣工作在方式 1。最大定時時間:Tmax=2^16*10^(6)s=65536 uS而我們希望輸出時間以秒記,因此需要進(jìn)行定時擴(kuò)充。為方便計算,定時時間設(shè)為 50000 uS。這樣:TH1=(6553650000)/256=60;TL1=(6553650000)%256=176;輸出時間到時關(guān)閉 PWM 輸出。輸出時間控制程序如下:/**********************T1 中斷服務(wù)程序*******************/void timer1(void)interrupt 3 using 1{ count1++。 //定時擴(kuò)充TH1=60。TL1=176。if(count1==20) //定時一秒{count1=0。ToutReal。if(ToutReal==0)TR0=TR1=0,OUTPUT=0。 //關(guān)閉 PWM 輸出,停止計時。} 按鍵中斷為了減少硬件開銷少占用單片機(jī)的 I/O 口,這里只設(shè)計了 4 個按鍵。按鍵動作時的典型波形如圖??梢钥吹綄?shí)際波形中電壓抖動現(xiàn)象,影響單片機(jī)判斷。消抖有硬件和軟件兩種方式。硬件消抖可以采用 RC 電路或 RS 觸發(fā)器。但是在按鍵多時增加硬件開銷,所以我們采用軟件消抖的方式。按鍵抖動時間一般為 1020ms,所以可以延時 20ms 后判斷按鍵是否真的動作(包括按下和松開) 。圖 15 按鍵動作電壓波形C51 編譯器支持在 C 語言源程序中直接編寫 89C52 單片機(jī)的中斷服務(wù)函數(shù)程序 。C51 編譯器對函數(shù)的定義進(jìn)行了擴(kuò)展,增加了一個擴(kuò)展關(guān)鍵字 interrupt。 關(guān)鍵字interrupt 是函數(shù)定義時的一個選項,加上這個選項就可以將一個函數(shù) 定義成中斷服務(wù)函數(shù)。定義中斷服務(wù)函數(shù)的一般形式為中斷表函數(shù)類型 函數(shù)名 ( 形式參數(shù)表 )[interrupt n] [using n] 關(guān)鍵 字 interrupt 后面的 n 是中斷號,n 的取值范圍為 0 ~ 3 1 編譯器從 8 n + 3處產(chǎn)生中斷向量。具體的中斷號 n 和中斷向量取決于不同的單片機(jī)芯片:89C52 單 片機(jī)的常 用中斷源 和中斷向量如表 1 所示 89C52 系列單片機(jī)可以在內(nèi)部 R A M 中使用 4 個不同的工作寄存器組,每個寄存器組中包含 8 個工作寄存 器( R0~ R7) 。C51 編譯器擴(kuò)展了一個關(guān)鍵宇 using,專門用來選擇單片機(jī)中不同的工作寄存器組。using 后面的 n是一個 0—3 的常整數(shù),分別選中 4 個不同的工作寄存器組。在定義一個函 數(shù)時 using是一個選項,如果不用該選項,則由編譯器選擇一個寄存器組作絕對寄存器組訪問。關(guān)鍵 字 usin 對函數(shù)目標(biāo)代碼的影響如下:在函數(shù)的八口處將當(dāng)前工作寄存器組保護(hù)到堆棧中指定的工作寄存器內(nèi)容不會改變,函數(shù)返回之前將被保護(hù)的工作寄存器蛆從堆棧中恢復(fù)。為了能夠在線修改 PWM 參數(shù)而不中斷輸出,外部中斷需要不打斷定時器 0 的中斷,因而我們選擇優(yōu)先級較低的外部中斷 INT1。為了方便修改參數(shù),我們采用低電平觸發(fā)。按鍵中斷程序如下:void EXINT1(void) interrupt 2 using 1{ Delay1ms(20)。EX1=0。 //關(guān)中斷if(KEY1==0)KeyValue=1。else if(KEY2==0)KeyValue=2。else if(KEY3==0)KeyValue=3。else if(KEY4==0)KeyValue=4。EX1=1。}由于只有四個按鍵,因此每個按鍵都是復(fù)用的,有多種的功能,且必須和 LCD1602 顯示的內(nèi)容配合好。按鍵的功能安排如下:表格 3 按鍵功能狀態(tài)按鍵編號0 1 2 3 4 5 6 7 報警0 進(jìn)入模式選擇界面確認(rèn) 確認(rèn) 確認(rèn) 確認(rèn) 確認(rèn) 進(jìn)入調(diào)整輸出界面停止輸出 無1 進(jìn)入模式選擇界面選擇DC增加 增加 增加 無 進(jìn)入調(diào)整輸出界面修改參數(shù) 無2 進(jìn)入模式選擇界面選擇AC減少 減少 減少 無 進(jìn)入調(diào)整輸出界面無 無3 進(jìn)入模式選擇界面無 返回上一界面返回上一界面返回上一界面返回上一界面進(jìn)入調(diào)整輸出界面返回上一個界面返回歡迎界面參數(shù)修改程序如下:case 1: while(KeyValue==2)dcac=1,KeyValue=0。//模式選擇while(KeyValue==3)dcac=0,KeyValue=0。Manag(dcac)。if(KeyValue==1){Delay1ms(20)。if(dcac)script=2。 //直流斬波模式else script=10。 //SPWM 模式KeyValue=0。LCD_cls()。}break。case 2: if(KeyValue==2) //設(shè)置 f{Delay1ms(20)。freq++,KeyValue=0。}if(KeyValue==3){Delay1ms(20)。 freq,KeyValue=0。}DcConf(freq)。if(KeyValue==4){Delay1ms(20)。 script=1,KeyValue=0。LCD_cls()。}if(KeyValue==1){Delay1ms(20)。script=3。KeyValue=0。LCD_cls()。}break。case 3: if(dcac){ if(KeyValue==2) //設(shè)置 rac{Delay1ms(20)。rac+=10,KeyValue=0。}if(KeyValue==3){Delay1ms(20)。rac=10,KeyValue=0。}DcConr(rac)。}else { if(KeyValue==2) //設(shè)置 k{Delay1ms(20)。k+=1,KeyValue=0。}if(KeyValue==3){Delay1ms(20)。k=1,KeyValue=0。}DcConr(k)。}if(KeyValue==4){Delay1ms(20)。script=2,KeyValue=0。LCD_cls()。}if(KeyValue==1){Delay1ms(20)。script=4,KeyValue=0。LCD_cls()。}break。case 4: if(KeyValue==2) //設(shè)置 Tout{Delay1ms(20)。Tout+=10,KeyValue=0。}if(KeyValue==3){Delay1ms(20)。Tout=10,KeyValue=0。}DcCont(Tout)。if(KeyValue==4){Delay1ms(20)。script=3,KeyValue=0。LCD_cls()。}if(KeyValue==1){Delay1ms(20)。script=5,KeyValue=0。LCD_cls()。}break。 LCD1602 編程1602 液晶模塊內(nèi)部的字符發(fā)生存儲器(CGROM)已經(jīng)存儲了 160 個不同的點(diǎn)陣字符圖形,這些字符有:阿拉伯?dāng)?shù)字、英文字母的大小寫、常用的符號、和日文假名等,每一個字符都有一個固定的代碼,比如大寫的英文字母“A”的代碼是 01000001B(41H) ,顯示時模塊把地址 41H 中的點(diǎn)陣字符圖形顯示出來,我們就能看到字母“A” 。液晶顯示模塊是一個慢顯示器件,所以在執(zhí)行每條指令之前一定要確認(rèn)模塊的忙標(biāo)志為低電平,表示不忙,否則此指令失效。1602 液晶模塊內(nèi)部的控制器共有 11 條控制指令。它的讀寫操作、屏幕和光標(biāo)的操作都是通過指令編程來實(shí)現(xiàn)的。要顯示字符時要先輸入顯示字符地址,也就是告訴模塊在哪里顯示字符。下表為LCD1602 的顯示地址。因?yàn)閷懭腼@示地址時要求最高位 D7 恒定為高電平 1 所以實(shí)際寫入的數(shù)據(jù)應(yīng)該是字符地址加上 80H。下表為 LCD1602 的顯示地址。如要在第二行第一個位置顯示數(shù)據(jù),則在寫入的數(shù)據(jù)應(yīng)該是 40H+80H=C0H。為了使用方便我們把 LCD1602 的常用操作寫成函數(shù),需要時直接調(diào)用函數(shù)即可。常用操作有:LCD 是否忙檢測,LCD 清屏,寫指令,光標(biāo)定位,顯示字符及字符串,LCD 初始化。由于 1602 無法直接顯示數(shù)據(jù),需要先把數(shù)據(jù)轉(zhuǎn)換為字符串,再送到 1602 顯示。轉(zhuǎn)換后的字符串要注意清除前面的 0。字符串轉(zhuǎn)換函數(shù)和數(shù)據(jù)顯示函數(shù)如下:void DataToChar(int dat) //數(shù)據(jù)字符串轉(zhuǎn)換函數(shù)。{DataArray[3]=dat%10。DataArray[2]=((datDataArray[3])/10)%10。DataArray[0]=dat/1000。DataArray[1]=(dat/100)%10。}void DispD(int dat) //數(shù)據(jù)顯示函數(shù){ i=j=0。DataToChar(dat)。 //數(shù)據(jù)字符串轉(zhuǎn)換for(j=0。j3。j++) //清除前面的 0{ if(DataArray[j])i=1。if(i)LCD_write_data(DataArray[j]+48)。}LCD_write_data(DataArray[j]+48)。} 顯示設(shè)計由于 LCD1602 只有 16*2 個顯示點(diǎn),無法在一個界面中完成所有的顯示內(nèi)容這里我們按功能來分顯示界面。界面 0:程序啟動時及出錯后的數(shù)據(jù)初始化界面 1:模式選擇void Manag(int dat){ LCD_set_position(0)。LCD_prints(MODE:)。LCD_set_position(7)。if(dat)LCD_prints(DC)。else LCD_prints(SPWM)。LCD_set_position(0x40)。LCD_prints(OK)。}界面 2:設(shè)置頻率void DcConf(int dat){ LCD_set_position(0)。LCD_prints(f:)。DispD(dat)。if(dcac)LCD_prints(KHz )。 //直流 PWM 輸出 120KHzelse LCD_prints(Hz )。 //SPWM 輸出 1100HzLCD_set_position(0x40)。LCD_prints(OK)。LCD_set_position(0x4c)。LCD_prints(BACK)。}界面 3:設(shè)置占空比或調(diào)幅比void DcConr(int dat){if(dcac) //設(shè)置占空比{ LCD_set_position(0)。LCD_write_data(0xe0)。LCD_write_data(39。:39
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1