|
信號發生器是一種常用的信號源,廣泛地應用于電子電路、自動控制系統和教學實驗等領域。 本設計采用STC89C52單片機作為控制核心,外圍采用數字/模擬轉換電路(DAC0832)、運放電路(LM358)、按鍵和LCD12864液晶顯示電路。電路采用單片機和一片DAC0832數模轉換器組成數字式低頻信號發生器,可產生正弦波、矩形波和三角波三種波形。系統通過單片機產生數字信號,通過DAC0832轉換為模擬信號,再通過放大器LM358就可以得到雙極性的各種波形,最終由示波器顯示出來。通過鍵盤來控制四種波形的類型選擇、頻率變化,其中頻率調節范圍為5HZ-100HZ,并通過液晶12864顯示其各自的波形類型以及頻率數值。
外加紅外熱釋電傳感器(PIR)現在最常見的就是樓道內的自動風扇基本用到的就是這種方案。
電路原理圖如下:
QQ截圖20181119092005.png (78.61 KB, 下載次數: 62)
下載附件
總電路圖
2018-11-19 09:22 上傳
單片機源程序如下:
- #include <reg52.h>
- #include <intrins.h>
- #include "hcsr501.h"
- #include "lcd12864.h"
- #include "Function Generator.h"
- #define uchar unsigned char
- #define uint unsigned int
- /**********主題顯示*****************/
- uchar code Theme_one[]="凄凄切切群群瞧瞧";
- uchar code Theme_two[]="親戚去去去去瞧瞧";
- uchar code Theme_thr[]="凄凄切切群群瞧瞧";
- uchar code Theme_fou[]="親親我群群去瞧瞧";
- /**********內容顯示****************/
- uchar code SOURCE_WAVE[] ="波形: ";
- uchar code SOURCE_FREQUENCY[]="頻率: HZ";
- uchar code SOURCE_AMPLITUDE[]=" 水龍頭的狀態 ";
- uchar code SOURCE_STATE[] =" ";
- /****************1ms延時函數********************/
- void DIS_theme()
- {
- set_LCD12864_pos(0,0);
- write_12864str(Theme_one);//"桂林電子科技大學""
- set_LCD12864_pos(1,0);
- write_12864str(Theme_two);//學號
- set_LCD12864_pos(2,0);
- write_12864str(Theme_thr);
- set_LCD12864_pos(3,0);
- write_12864str(Theme_fou);
- delay_ms(1000);
- set_LCD12864_pos(0,0);
- write_12864str(SOURCE_WAVE); //波形
- set_LCD12864_pos(1,0);
- write_12864str(SOURCE_FREQUENCY);//頻率
- set_LCD12864_pos(2,0);
- write_12864str(SOURCE_AMPLITUDE);////狀態
- set_LCD12864_pos(3,0);
- write_12864str(SOURCE_STATE);
- }
- /****************主函數************************/
- void main()
- {
- Timer0Init();//初始化定時器0
- Timer1Init();//初始化定時器1
- EA=1;
- LCD12864_init();//初始化液晶
- LCD12864_Busy();//液晶判忙
- DIS_theme();//主題顯示
- while(1)
- {
-
- PUTOUT_WAVE();//波形輸出
- check_option();//水龍頭感應檢測
- }
- }
復制代碼- #include "reg52.h"
- #include "hcsr501.h"
- #include "lcd12864.h"
- #define PEOPLE_NEAR_THRESHOLD 10 //人體接近判斷閥值
- #define PEOPLE_LEAVE_THRESHOLD 5 //人體離開判斷閥值
- uchar PeopleNear = 0; //人體接近判斷標示,0:無人接近或人離開;1:人接近
- uchar OutUpCount = 0; //HC-SR501輸出高電平計數
- uchar OutDowmCount = 0; //HC-SR501輸出低電平計數
- //uchar IR_flag=0; //標志位
- //uchar num=0;
- /****************1ms延時函數********************/
- void delay_ms(uint del)
- {
- uint i;
- for(;del>0;del--)
- for(i=124;i>0;i--);
- }
- /*****************************************************
- ** 函數名稱:Timer0Init
- ** 函數功能:單片機定時器0初始化,每50MS產生1次中斷
- ** 參 數:無
- ** 函數返回:無
- ******************************************************/
- void Timer0Init(void) //50毫秒@12MHz
- {
- TMOD |= 0x01; //設置定時器模式
- TH0 = (65536 - 50000) / 256; // 設置定時器0為工作方式1(M1M0為01)
- TL0 = (65536 - 50000) % 256; // 裝初值12M晶振定時50ms數位50000
- //EA = 1; // 開總中斷
- TR0 = 1; //定時器0開始計時
- ET0 = 1;
- }
- /*****************************************************
- ** 函數名稱:check_option()
- ** 函數功能:判斷人是否走進還是離去
- ** 參 數:無
- ** 函數返回:無
- ******************************************************/
- void check_option()
- {
- if(PeopleNear) //熱釋電紅外端口有輸出為0,無輸出為1.
- {
-
- relay=1;//繼電器吸合
- set_LCD12864_pos(3,0);
- write_12864str(" OPEN ! Welcome!");//顯示字符串Welcome!
- delay_ms(2500);delay_ms(2500);
-
- }
- else
- //IR_flag=0;
- relay=0; //繼電器斷開
- set_LCD12864_pos(3,0);
- write_12864str("CLOSE ! See you!");//顯示字符串See you!
- // delay_ms(2500);delay_ms(2500);
- // set_LCD12864_pos(3,4);
- // write_12864str("no one !");//顯示字符串Welcome!
- }
- /*****************************************************
- ** 函數名稱:Timer0IntPro
- ** 函數功能:單片機定時器0中斷處理函數
- ①連續10次采集到HC-SR501高電平輸出,判斷
- 為有人體接近。
- ②當已判斷有人體接近年后,連續10次采集到
- HC-SR501低電平輸出,判斷為人體離開
- ** 參 數:無
- ** 函數返回:無
- ******************************************************/
- void Timer0IntPro(void) interrupt 1 using 0
-
- {
- TH0 = (65536-50000)/256;//裝初值,50ms申請一次中斷
- TL0 = (65536-50000)%256;
- // num++; //申請一次中斷num加1一次
- // if(num==100)
- // {num=0;IR_flag=1;}
- if(Out)
- {
- OutUpCount++;
- if(OutUpCount >= PEOPLE_NEAR_THRESHOLD)
- {
- PeopleNear = 1;
-
- }
- }
- else
- {
- if(PeopleNear)
- {
- OutDowmCount++;
- if(OutDowmCount >= PEOPLE_LEAVE_THRESHOLD)
- {
- PeopleNear = 0;
- OutUpCount = 0;
- OutDowmCount = 0;
- }
- }
- }
- }
復制代碼
所有資料51hei提供下載:
|
-
-
dac0832中文資料.pdf
2018-11-19 09:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
324.08 KB, 下載次數: 22, 下載積分: 黑幣 -5
dac0832中文數據手冊
-
-
源程序.rar
2018-11-19 09:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
61.88 KB, 下載次數: 35, 下載積分: 黑幣 -5
源程序
-
-
Sheet1.rar
2018-11-19 09:23 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
18.17 KB, 下載次數: 27, 下載積分: 黑幣 -5
原理圖
-
-
dac0832.pdf
2018-11-19 09:22 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
1.82 MB, 下載次數: 13, 下載積分: 黑幣 -5
dac0832數據手冊
評分
-
查看全部評分
|