国产免费AV|泡泡玛特欧洲总部将设在伦敦|中文天堂网www新版资源在线|一本久道综合在线中文|国精产品一二三产区的使用方法|香蕉鱼在线观看|www.27eee
ELEOK
標題:
51單片機可調周期參數波形發生器源程序和Proteus仿真
[打印本頁]
作者:
coolfire
時間:
2021-4-21 22:48
標題:
51單片機可調周期參數波形發生器源程序和Proteus仿真
單片機設計—波形發生器,波形可選擇、幅值周期可編輯、含有lcd0832顯示屏、led數碼管、矩陣鍵盤輸入。通過lcd12864顯示屏顯示當前狀態,根據提示通過矩陣鍵盤輸入波形類型、波形幅值周期等參數,通過led顯示屏顯示實時電壓,通過dac0832輸出波形。
仿真原理圖如下(proteus仿真工程文件和完整單片機C語言源碼可到本帖附件中下載)
波形發生器仿真文件和C源程序.zip
(816.98 KB, 售價: 5 E幣)
2021-4-21 22:48 上傳
點擊文件名下載附件
售價: 5 E幣
[記錄]
[
購買
]
1.png
(61.57 KB)
下載附件
2021-4-21 22:45 上傳
2.png
(21.46 KB)
下載附件
2021-4-21 22:45 上傳
3.png
(33.71 KB)
下載附件
2021-4-21 22:46 上傳
1. 輸出矩形波、梯形波、三角波、鋸齒波、正弦波五種波形;
2. 每種波形的周期可更改;
3. 每種波形的幅值可更改;
4. 采用lcd12864中文顯示屏顯示波形輸入輸出信息;
5. 采用數碼管顯示實時電壓。
單片機源程序如下:
/**************************************************************************************
* 設計一個能產生正弦、方波、三角波、梯形波等波形的波形發生器,周期頻率可調。
* 其他附加功能:
*
總得看一下有沒有重復定義的io口
***************************************************************************************/
#include "reg52.h" //此文件中定義了單片機的一些特殊功能寄存器
#include "DAC0832.h"
#include "lcd12864.h"
#include "key.h"
sbit test_led=P3^0;
sbit test_led1=P3^1;
sbit seg_k1=P3^3;
sbit seg_k2=P3^4;
int boxing=0;
int zhouqi=0;
float fuzhi=0;
char code Hz_0[]=
{0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,
0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,};
char code Hz_1[]=
{0x00,0x00,0x10,0x10,0xF8,0x00,0x00,0x00,
0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,};
char code Hz_2[]=
{0x00,0x70,0x08,0x08,0x08,0x08,0xF0,0x00,
0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,
};
char code Hz_3[]=
{0x00,0x30,0x08,0x08,0x08,0x88,0x70,0x00,
0x00,0x18,0x20,0x21,0x21,0x22,0x1C,0x00,
};
char code Hz_4[]=
{0x00,0x00,0x80,0x40,0x30,0xF8,0x00,0x00,
0x00,0x06,0x05,0x24,0x24,0x3F,0x24,0x24,
};
char code Hz_5[]=
{0x00,0xF8,0x88,0x88,0x88,0x08,0x08,0x00,
0x00,0x19,0x20,0x20,0x20,0x11,0x0E,0x00,
};
char code Hz_6[]=
{0x00,0xE0,0x10,0x88,0x88,0x90,0x00,0x00,
0x00,0x0F,0x11,0x20,0x20,0x20,0x1F,0x00,
};
char code Hz_7[]=
{0x00,0x18,0x08,0x08,0x88,0x68,0x18,0x00,
0x00,0x00,0x00,0x3E,0x01,0x00,0x00,0x00,
};
char code Hz_8[]=
{0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,
0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,
};
char code Hz_9[]=
{0x00,0xF0,0x08,0x08,0x08,0x10,0xE0,0x00,
0x00,0x01,0x12,0x22,0x22,0x11,0x0F,0x00,
};
char code Hz_dian[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,
};
extern u8 KeyValue;
int flag=1;//推出while
unsigned int key_time;//判斷輸入了幾個數
unsigned int time_count=0;//幅值換算
unsigned int time_loop=0; //周期換算
unsigned int time_count_h=0; //周期換算H
unsigned int time_count_l=0; //周期換算L
void main_delay(int x)
{while(x--);}
void Int0Init()
{
//設置 INT0
IT0=1;//跳變沿出發方式(下降沿)
EX0=1;//打開 INT0 的中斷允許。
EA=1;//打開總中斷
}
/*******************************************************************************
* 函 數 名 : main
* 函數功能 : 主函數
* 輸 入 : 無
* 輸 出 : 無
*******************************************************************************/
void main()
{
Int0Init();
output_xinxi();//顯示姓名信息
while(flag);
test_led=1;
test_led1=1;
while(1)
{
flag=1;
switch (boxing)
{case (0): //矩形波
time_loop=zhouqi*100/65;
time_count_l=(int)(fuzhi*10)%10;
time_count_h=fuzhi;
time_count=(51*time_count_h+5*time_count_l);
while (flag)
{P2=Rectangular_wave(time_loop,time_count_h,time_count_l,time_count);}
break;//
case (1):time_count=fuzhi*52; //幅值換算結果 //鋸齒波
time_loop=(zhouqi*1000/time_count-195)/20;
while(flag)
{P2=Sawtooth_wave(time_loop,time_count);}
break;
case (2):time_count=zhouqi*10/30;
test_led=0;
while(flag)
{P2=Sine_wave(time_count,fuzhi);}
break;
case (3):time_count=fuzhi*52; //幅值換算結果 //三角波
time_loop=(zhouqi*1000/time_count-195)/20;
while(flag)
{P2=Triangle_wave(time_loop,time_count);}
break;
case (4):time_count=fuzhi*104; //幅值換算結果 //梯形波
time_loop=(zhouqi*1000/time_count-195)/20;
while(flag)
{P2=Trapezoidal_wave(time_loop,time_count);}
break;
}
}
}
void Int0() interrupt 0 //外部中斷 0 的中斷函數
{
main_delay(1000); //延時消抖
Clr_Scr();
seg_k1=1;
seg_k2=1;
boxing=0;
zhouqi=0;
fuzhi=0;
main_delay(1000);
KeyValue=0;
output_shuru();
main_delay(100000);
//檢測波形
while((KeyValue!=11))
{KeyDown();}
output_boxing();
main_delay(100000);
KeyValue=0;
key_time=0;
while((KeyValue!=11))
{
KeyValue=15;
while(KeyValue==15)
{KeyDown();}
main_delay(100000);
LCDMcs=1; //右屏開顯示
LCDScs=0;
switch(KeyValue)
{
case(0):hz_LCDDisp8(2,key_time+0,Hz_0);key_time=key_time+8;break;
case(1):hz_LCDDisp8(2,key_time+0,Hz_1);key_time=key_time+8;break;
case(2):hz_LCDDisp8(2,key_time+0,Hz_2);key_time=key_time+8;break;
case(3):hz_LCDDisp8(2,key_time+0,Hz_3);key_time=key_time+8;break;
case(4):hz_LCDDisp8(2,key_time+0,Hz_4);key_time=key_time+8;break;
case(5):hz_LCDDisp8(2,key_time+0,Hz_5);key_time=key_time+8;break;
case(6):hz_LCDDisp8(2,key_time+0,Hz_6);key_time=key_time+8;break;
case(7):hz_LCDDisp8(2,key_time+0,Hz_7);key_time=key_time+8;break;
case(8):hz_LCDDisp8(2,key_time+0,Hz_8);key_time=key_time+8;break;
case(9):hz_LCDDisp8(2,key_time+0,Hz_9);key_time=key_time+8;break;
case(10):hz_LCDDisp8(2,key_time+0,Hz_dian);key_time=key_time+8;break;
default:break;
}
if (KeyValue!=11)
boxing=KeyValue;
}
//檢測周期
while((KeyValue!=11))
{KeyDown();}
output_zhouqi();
KeyValue=0;
key_time=0;
while((KeyValue!=11))
{
KeyValue=15;
while(KeyValue==15)
{KeyDown();}
main_delay(100000);
LCDMcs=1; //右屏開顯示
LCDScs=0;
switch(KeyValue)
{
case(0):hz_LCDDisp8(4,key_time+0,Hz_0);key_time=key_time+8;break;
case(1):hz_LCDDisp8(4,key_time+0,Hz_1);key_time=key_time+8;break;
case(2):hz_LCDDisp8(4,key_time+0,Hz_2);key_time=key_time+8;break;
case(3):hz_LCDDisp8(4,key_time+0,Hz_3);key_time=key_time+8;break;
case(4):hz_LCDDisp8(4,key_time+0,Hz_4);key_time=key_time+8;break;
case(5):hz_LCDDisp8(4,key_time+0,Hz_5);key_time=key_time+8;break;
case(6):hz_LCDDisp8(4,key_time+0,Hz_6);key_time=key_time+8;break;
case(7):hz_LCDDisp8(4,key_time+0,Hz_7);key_time=key_time+8;break;
case(8):hz_LCDDisp8(4,key_time+0,Hz_8);key_time=key_time+8;break;
case(9):hz_LCDDisp8(4,key_time+0,Hz_9);key_time=key_time+8;break;
case(10):hz_LCDDisp8(4,key_time+0,Hz_dian);key_time=key_time+8;break;
default:break;
}
if (KeyValue!=11)
zhouqi=KeyValue+zhouqi*10;
}
//檢測幅值
while((KeyValue!=11))
{KeyDown();}
output_fuzhi();
KeyValue=0;
key_time=0;
while((KeyValue!=11))
{
KeyValue=15;
while(KeyValue==15)
{KeyDown();}
……………………
…………限于本文篇幅 余下代碼請下載附件…………
復制代碼
歡迎光臨 ELEOK (http://m.afoofa.cn/)
Powered by Discuz! X5.0