導航:首頁 > 操作系統 > 51單片機鋸齒波

51單片機鋸齒波

發布時間:2022-10-03 19:00:05

❶ 我用51單片機做了一個函數信號發生器,函數信號用程序實現,有高手知道鋸齒波的思路嗎

鋸齒波設計的思想是:設置一個變數,以一定的步進值累加,加達最大值後清零。每次累加的結果傳輸給DA轉換器,輸出就是個鋸齒波了。
幅值與你設置的最大值有關,這個最大值可以通過按鍵設置。你可以設置這個最大值的大小,也可以給這個值設定一個系數,通過控制這個系數的大小來調整最大值

❷ 試用c語言編寫一個能輸出鋸齒波信號的單片機c51程序

程序加一個的LCD1602,你選擇使用

的#include <reg52.h>的/ /包含頭文件
?#包括<intrins.h>的
#定義UCHAR無符號的字元/ /宏定義
?#定義UINT無符號整數
?UCHAR I,J,N,Z,/ /定義全局變數
SBIT RS = P2 ^ 0; / /定義埠
?和SBIT RW = P2 ^ 1;
SBIT E = P2 ^ 2;
SBIT K = P2 ^ 7;
SBIT K1 = P2 ^ 6;
UCHAR代碼STR0 [] = {「正弦波」}; / /定義LCD1602顯示的字元數組
UCHAR代碼STR1 [] = {「三角波」};
UCHAR代碼字元串str2 [] = {「方波」};
?的UCHAR代碼表[3] [40] = / /定義的兩維陣列的波形
?{
??80H時,0x94的,0xa7,0xb9,0xca,0xd9,0xe7,0xf1,0XF8,是0xFD,
??是0xFD,0xff,則0XF8,0xf1,0xe7,0xd9,0xca,0xb9 0xa7,0x94的,
??80H時,0x6c,將0x55,0x46,0x35,$ 25,為0x18,0X0E,0X06,0X02,
??為0x00,0X02,0X06,0X0E,為0x18,$ 25,0x35,0x46,0x55??的,0x6c,
??80H時,0x8c,0x99,0xa6,0xb3,0XC0,含有0xCC,0xd9,0xe6,0xf2,
??為0xff,0xf2,0xe6,0xd9,含有0xCC,0XC0,0xb3,0xa6,0x99,0x8c,
??80H時,為0x73,0x66,0X5A,0x4d,0X40,地址0x33,0X26,0X1A,0X0D,
?為0x00,0X0D,0X1A,0X26,地址0x33,0X40,0x4d,為0x5A,0x66,為0x73,
??為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則
??為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則是0xFF,0xFF時,為0xff,0xff,則
??0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
??0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00
?};
?無效延遲(UINT Z)/ /延時程序
?{
????(Z,Z> 0,Z - )
???
??
??}
?}
?無效Write_command「(UCHAR CMD)/ / LCD1602寫命令程序
?{
??RS = 0; / /選擇指令寄存器
?RW = 0; / /寫操作
?E = 1 / /使能端
?P1 = CMD;
?延遲時間(1);
?E = 0;
LCD1602是不是很忙?延遲(10); / /延時
?}
?無效WRITE_DATA(UCHAR CMD)/ / LCD1602寫入數據的命令
?{
??RS = 1; / /選擇數據寄存器
?RW = 0; / /寫操作
?E = 1; / /結束
?P1 = CMD;
?延遲時間(1);
?E = 0;
LCD1602是不是很忙?延遲(10); / /延時
?}
?的無效Lcd_init()/ / LCD1602初始化程序
?{
????Write_command(0x38); / /設置16 * 5 * 7點陣8位數據介面
?Write_command(0X0C)/ / LCD1602打開顯示,不顯示游標
?Write_command(0X06)/ /讀或寫一個字元指針加1不動
?Write_command(0X80 +0 X00); / /設置數據地址指針
?}
?無效顯示器()/ / LCD1602顯示英語課程
?{
????Lcd_init();
?(我== 0)
???
?組(n = 0,N <13,N +)
???
???WRITE_DATA(STR0 [N]);
??}
????}
?否則,如果(我== 1)
?{
?組(n = 0,N <13,N +)
??
??WRITE_DATA(STR1 [N]);
?}
?}
?其他
?{
?組(n = 0,N <13,N +)
??
??WRITE_DATA(字元串str2 [N]);
?}
?}
?}
無效的主要()/ /主函數
?{
???顯示();
?而(1)
?{
??中for(j = 0; J <40; + +)
???
???P0 =表[I] [J];
???
??}
(k == 0)/ /切換程序??
???
????延遲時間(1);
???(k == 0);
????
????(K == 0)
?????
????+ +;
????如果(i == 3)= 0;
???顯示();
????}
????
???}
??????而(k == 0);
??}
?}
?}

❸ 幫忙解決下:使用51單片機,產生方波、鋸齒波、三角波等波形,頻率可調。並且能實現在protues中的模擬

基本知識點:
1、定時器
2、PWM
方波、三角波的實現方法:
1、PWM固定占空比1:1,實現對稱方波輸出
2、方波後連接積分電路,可將方波變為同頻率的三角波。
實現以上功能較容易,且可實現的頻率范圍較寬。
鋸齒波實現方法:
鋸齒波實現方法稍顯麻煩,不過硬體電路原理與三角波類似。
區別在於鋸齒波在一個周期內輸出若干個占空比不同的方波,每個方波的占空比除了最後一個點之外,呈線性遞增。這樣出來的信號還不是鋸齒波,需要經過積分電路才能轉變為鋸齒波。由於一個周期需要輸出多個方波(個數越多,精度越高),因此,鋸齒波的頻率不能太高。
鋸齒波個人建議採用AD或專用的信號發生器電路。

❹ 請問你是不是會 用KEIL編寫程序就是用51單片機匯編鋸齒波,方波....的程序

用C編寫更簡單

❺ 如何使用51單片機做一個和輸入頻率同步的鋸齒波發生器

找一個快一點的單片機 或者
生成鋸齒波可以用方波積分,這樣用觸發器和有源電容+放電電路就行了。你這個頻率不高,找最通用的觸發器就行 正負不是問題 電平基準總是可以調節的 然後邊沿觸發就好

❻ mcs51單片機如何通過數模轉換器DAC0832生成負向鋸齒波(主要是負向怎麼來不明白,正向鋸齒波課本有)

不知你這負向指的什麼?!如是是在隔直電容後的,那就用一個反相放大器就行了,如你要在電源上也是負的那可只有再加一個負電源再用放大器在這負電源環境下進行放大。正弦波可用查表方式來產生。

❼ 怎麼用51單片機實現鋸齒波

嘿嘿
還是讓俺來幫你解決吧
1
關於定時器定時時間的計算問題:
如果使用的是12m晶振計算,指令周期1us,定時器是加1計數器,即是對內部時鍾即指令周期脈沖計數
每當1us到時,計數器加1。
假設
定時器的初始值=x,則每到1us
計數器的值就加1
,則計數器值=x+1+1+...+1
值越來越大,最後達到ffffh+1
就會產生溢出
結果計數器值回0(ffffh+1=65536)
可以推出
定時時間=計數的1的個數×1us=(65536—x
)1
us
結論:
定時時間跟初始值即時間常數x有關。
如果要定時0.5毫秒=500us
根據定時時間公式
500=(65536—x

即x=(65536-500)
一般把高8位送th0

(65536-500)/256

(65536-500)%256即除上256後的余數
即低8位數送給tl0
每當定時時間到
計數器值都回0
必須重新送時間常數x
2每條指令的時間怎麼算?
答復:
可以查指令表
每一條指令的執行時間的周期數
都是固定的

nop
為一個機器周期
mov
r6,#200;
為2個機器周期
機器周期=12/晶振頻率
如果晶振頻率=12mhz
則機器周期=1
us
就可以知道
;
執行nop指令的執行時間為
1
us
執行mov
r6,#200指令的執行時間為
2
us
因此
是可以精確計算出指令的延時時間的
呵呵
就介紹這些吧
滿意就
給加分吧

❽ 基於51單片機的鋸齒波發生器,要求能夠發生出1HZ,100HZ,1KHZ。

//晶振頻率12M,所以定時器脈沖頻率為1M=1000000

#define F 12 // 晶振頻率

#define ONE_SECOND (F*1000000/12) // 機器周期頻率

#define IT0_Cost 10 // 定時器0中斷平均花費時間10us,這是大概數據,自己可以仔細計算,影響不大隻是為了提高精度,所以無法不可能輸出1KHz鋸齒波,最高只能輸出大約390Hz

#define SAWF 100 // 輸出鋸齒波頻率,建議輸出不高於100Hz

#define oTH0 (65536-ONE_SECOND/SAWF/256 + IT0_Cost) / 256

#define oTL0 (65536-ONE_SECOND/SAWF/256 + IT0_Cost) % 256

void main()

{

TMOD=0X01;

TH0=oTH0 ;

TL0=oTL0;

ET0=1;

TR0=1;

EA=1;

while(1){};

}

void timer0(void) interrupt 1

{

static unsigned char vout,ff;
TH0=oTH0 ;

TL0=oTL0;

P2=vout; // P2接DAC,輸出100Hz
vout++;
if(vout==255) vout=0;

/* 注釋部分替換上面三行即輸出1Hz
ff++;
if(ff == 100)
{
P2=vout; // P2接DAC,輸出1Hz
vout++;
if(vout==255) vout=0;
*/
}

*/

}

❾ 五一單片機與數模轉換晶元dac 0832的硬體連接如圖編寫輸出鋸齒波的程序

可以這樣,DAC0832是根據輸入的數字量,輸出相應的模擬量,鋸齒波是有規律的模擬量。

單片機內部程序可以通過演算法(規律計算或數組),定時生成一個數字量發送到DAC0832,使其輸出相應模擬量,即可。
例如鋸齒波是從0~3V,將0~3V分為若干個點(解析度),定時輸出每個點的數字量。

❿ 51單片機中DAC0832轉換模塊,c語言程序實現鍵控波形輸出,鋸齒波,方波,矩形波

DAC是輸入的,還要輸出?我有DAC0832的proteus應用,不過是針對輸入的部分,輸出顯示在1602LCD上

閱讀全文

與51單片機鋸齒波相關的資料

熱點內容
住宿app可砍價是什麼意思 瀏覽:131
java跳出語句 瀏覽:51
javastring個數 瀏覽:926
人工免疫演算法應用 瀏覽:77
有什麼app能收聽俄羅斯廣播電台 瀏覽:34
2015考研紅寶書pdf 瀏覽:443
程序員幾月跳槽合適 瀏覽:443
液壓油可壓縮嗎 瀏覽:944
源泉cad加密文件 瀏覽:125
銀河v10驅動重編譯 瀏覽:891
電腦上文件夾右擊就會崩潰 瀏覽:691
右美維持演算法 瀏覽:938
php基礎編程教程pdf 瀏覽:220
穿越之命令與征服將軍 瀏覽:351
android廣播重復 瀏覽:832
像阿里雲一樣的伺服器 瀏覽:319
水冷空調有壓縮機嗎 瀏覽:479
訪問日本伺服器可以做什麼 瀏覽:434
bytejava詳解 瀏覽:450
androidjava7 瀏覽:386