![]() |
發(fā)布時間: 2019-8-5 21:16
正文摘要:前段時間開始接觸到單片機(jī),以為單片機(jī)會很簡單,但比我預(yù)想的要復(fù)雜一些,特別是剛開始接觸的時候,需要下載各種軟件,然后自己慢慢地去熟悉這些軟件的操作。我是從51單片機(jī)開始入手, ... |
Lily-lemon 發(fā)表于 2020-1-3 11:20 在嗶哩嗶哩有一堆的安裝資料以及教程,而且是免費(fèi)的,可以去看看 |
您好!有匯編語言的嗎 |
zkb=50; |
丶1u0 發(fā)表于 2020-3-13 18:23 RU1是滑動變阻器。元件名是:POT-HG |
這個怎么調(diào)占空比 |
本帖最后由 suqianfu 于 2020-4-11 22:29 編輯 大佬,我添加了一點注釋,不知道理解得對不對 #include<reg51.h> //調(diào)用頭文件 #define uchar unsigned char // #define uint unsigned int float fosc=12000000; //聲明單片機(jī)運(yùn)行頻率表12Mhz sbit KEY1=P1^0; //聲明按鍵1占用腳 sbit KEY2=P1^1; //聲明按鍵2占用腳 sbit KEY3=P1^2; //聲明按鍵3占用腳 sbit KEY4=P1^3; //聲明按鍵4占用腳 sbit OUTPUT=P2^0; //聲明輸出占用腳 uchar zkb; //聲明占空比變量 uint freq; //聲明頻率變量 uchar TIMER0_L,TIMER0_H,TIMER1_L,TIMER1_H;//聲明時間變量 void delay(uchar n) //延時函數(shù) { uchar i; //局部整型變量 while(n--) //循環(huán)(執(zhí)行次數(shù)) {for(i=255;i>0;i--) //賦值I為255,I大于0,I--自減1.直至循環(huán)執(zhí)行次數(shù)清零(無中生友系列) {} }} void chushihua(void) //名為(初始化)之子函數(shù) { P1=0x0f; //賦值P1口數(shù)據(jù) freq=500; //賦值頻率=500 zkb=50; //賦值占空比為50% TIMER0_L=0xe0; //定時變量,定時器0初始時間高8位賦值,具體定時時間自己查資料 TIMER0_H=0xb1; //定時變量,定時器0初始時間低8位賦值,具體定時時間自己查資料 TIMER1_L=0xf0; //定時變量,定時器1初始時間高8位賦值,具體定時時間自己查資料 TIMER1_H=0xd8; //定時變量,定時器1初始時間低8位賦值,具體定時時間自己查資料 TL0=0xe0; //定時器0初始時間高8位賦值,具體定時時間自己查資料 TH0=0xb1; //定時器0初始時間低8位賦值,具體定時時間自己查資料 TL1=0xf0; //定時器0初始時間高8位賦值,具體定時時間自己查資料 TH1=0xd8; //定時器0初始時間高8位賦值,具體定時時間自己查資料 TMOD=0x11; //設(shè)定定時器工作模式 IT0=1; //設(shè)定外部中斷模式 EX0=1; //啟動外部中斷 ET0=1; //啟動定時器0中斷 ET1=1; //啟動定時器1中斷 EA=1; //啟動全局中斷使能 TR0=1; //啟動定時器0 TR1=1; //啟動定時器1 } void main(void) //主程序 { chushihua(); //調(diào)用初始化子程序 while(1) //循環(huán) { } } void Timer0_freq() interrupt 1 //中斷子程序--頻率 { TR1=1; //啟動定時器1 TL0=TIMER0_L; //定時器0高8位重新賦值定時函數(shù),具體定時時間自己查資料 TH0=TIMER0_H; //定時器0低8位重新賦值定時函數(shù),具體定時時間自己查資料 OUTPUT=1; //輸出高電平 } void Timer1_zkb() interrupt 3 //中斷子程序--占空比 { TR1=0; //關(guān)閉定時器1 TL1=TIMER1_L; //定時器1高8位重新賦值定時函數(shù),具體定時時間自己查資料 TH1=TIMER1_H; //定時器1低8位重新賦值定時函數(shù),具體定時時間自己查資料 OUTPUT=0; //輸出低電平 } void keyscan() interrupt 0 using 1 //中斷子程序--按鍵檢測 { float TF0,TZ1; //聲明浮點變量....這句話不是看得太懂...理解錯了勿怪 EX0=0; //關(guān)閉外部中斷 delay(10); //延時10 if(P1!=0x0f) //演示后如果檢測到P1口不等于0X0F這個值,判斷按鍵按下 { if(KEY1==0) freq+=500; //如果是按鍵1按下,則頻率變量增加500 if(KEY2==0) freq+=50; //如果是按鍵2按下,則頻率變量增加50 if(freq>10000) freq=500; //如果頻率變量超過10000,則頻率變量重新置為500 if(KEY3==0) zkb+=10; //如果是按鍵3按下,則占空比變量增加10 if(KEY4==0) zkb++; //如果是按鍵4按下,則占空比變量增加1 if(zkb>100) zkb=1; //如果占空比超過100,則占空比變量重新置為1 TF0=(65536-fosc/(12.0*freq)); //定時器溢出標(biāo)記TF0賦值為65536減去時鐘頻率12分頻 ??不是太理解 TZ1=(65536-(fosc*zkb)/(12.0*100*freq)); //TZ1這個啥玩意?跟上一行大概意思吧 TIMER0_H=(uint)TF0/256; TIMER0_L=(uint)TF0%256; TIMER1_H=(uint)TZ1/256; TIMER1_L=(uint)TZ1%256; } P1=0x0f; //重新賦值P1口初始化 EX0=1; //啟動外部中斷 TR0=1; //重新啟動定時器0TR0 TR1=1; //重新啟動定時器1TR1 } |
丶1u0 發(fā)表于 2020-3-13 18:23 看圖RV1應(yīng)該似乎可調(diào)電阻。隨便找個什么高阻值電阻就可以了。反正是測試波形用的 |
RV1是什么東西阿 |
RV1是什么東西阿 在Proteus中怎么查找呢 |
RV1是什么呀 在Proteus中怎么找呢 |
誒可以哦,不錯哦,真是個好思路,可以參考參考 |
請問一般Proutues要從哪里下載呀? |
為什么我的仿真改不了占空比呢 |
您好,樓主,在您的keyscan()中定義了TF0,這個是stc的中斷溢出標(biāo)志位,您的程序跑起來沒有問題么? |
Powered by 單片機(jī)教程網(wǎng)