系統框圖
該系統采用單片機作為數據處理及控制核心,由單片機完成人機界面、系統控制、信號的采集分析以及信號的處理和變換,采用按鍵輸入,利用虛擬示波器顯示波形的方案。將設計任務分解為按鍵電路、輸出轉換電路等模塊。圖3-2為系統的總體框圖。
系統仿真
單擊仿真界面左下方的開始按扭,仿真就開始了。具體仿真過程如下:
(1)f=50HZ正弦波的調試結果
單片機源程序如下:
#include #define uchar unsigned char #define uint unsigned int #define DAdata P0 //DA數據端口 sbit DA_S1= P2^0; // 控制DAC0832的8位輸入寄存器,僅當都為0時,可以輸出數據(處于直通狀態),否則,輸出將被鎖存 sbit DA_S2= P2^1; // 控制DAC0832的8位DAC寄存器,僅當都為0時,可以輸出數據(處于直通狀態),否則,輸出將被鎖存 sbit key= P3^2; uchar wavecount; //'抽點'計數 uchar THtemp,TLtemp;//傳遞頻率的中間變量 uchar judge=1; //在方波輸出函數中用于簡單判別作用 uchar waveform; //當其為0、1、2時,分別代表三種波 uchar code freq_unit[3]={10,50,200}; //三種波的頻率單位 uchar idata wavefreq[3]={1,1,1}; //給每種波定義一個數組單元,用于存放單位頻率的個數 uchar code lcd_hang1[]={"Sine Wave " "Triangle Wave " "Square Wave " "Select Wave: " "press No.1 key! "}; uchar idata lcd_hang2[16]={"f= Hz "}; uchar code waveTH[]={ 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xec,0xf6,0xf9,0xfb,0xfc,0xfc,0xfd,0xfd,0xfd,0xfe}; uchar code waveTL[]={ 0x06,0x8a,0x10,0x4e,0x78,0x93,0xa8,0xb3,0xbe,0xc6, //正弦波頻率調整中間值 0xac,0xde,0x48,0x7a,0x99,0xaf,0xbb,0xc8,0xd0,0xde, //三角波頻率調整中間值 0x88,0x50,0x90,0x32,0x34,0xbe,0x4a,0xa3,0xe5,0x2c}; /*************************************************************************************************/ uchar code triangle_tab[]={ //每隔數字8,采取一次 0x00,0x08,0x10,0x18,0x20,0x28,0x30,0x38,0x40,0x48,0x50,0x58,0x60,0x68,0x70,0x78, 0x80,0x88,0x90,0x98,0xa0,0xa8,0xb0,0xb8,0xc0,0xc8,0xd0,0xd8,0xe0,0xe8,0xf0,0xf8,0xff, 0xf8,0xf0,0xe8,0xe0,0xd8,0xd0,0xc8,0xc0,0xb8,0xb0,0xa8,0xa0,0x98,0x90,0x88,0x80, 0x78,0x70,0x68,0x60,0x58,0x50,0x48,0x40,0x38,0x30,0x28,0x20,0x18,0x10,0x08,0x00}; uchar code sine_tab[256]={ //輸出電壓從0到最大值(正弦波1/4部分) 0x80,0x83,0x86,0x89,0x8d,0x90,0x93,0x96,0x99,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae,0xb1,0xb4,0xb7,0xba,0xbc, 0xbf,0xc2,0xc5,0xc7,0xca,0xcc,0xcf,0xd1,0xd4,0xd6,0xd8,0xda,0xdd,0xdf,0xe1,0xe3,0xe5,0xe7,0xe9,0xea,0xec, 0xee,0xef,0xf1,0xf2,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfd,0xfe,0xff,0xff,0xff,0xff,0xff,0xff, //輸出電壓從最大值到0(正弦波1/4部分) 0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfd,0xfd,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7,0xf6,0xf5,0xf4,0xf2,0xf1,0xef, 0xee,0xec,0xea,0xe9,0xe7,0xe5,0xe3,0xe1,0xde,0xdd,0xda,0xd8,0xd6,0xd4,0xd1,0xcf,0xcc,0xca,0xc7,0xc5,0xc2, 0xbf,0xbc,0xba,0xb7,0xb4,0xb1,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c,0x99 ,0x96,0x93,0x90,0x8d,0x89,0x86,0x83,0x80, //輸出電壓從0到最小值(正弦波1/4部分) 0x80,0x7c,0x79,0x76,0x72,0x6f,0x6c,0x69,0x66,0x63,0x60,0x5d,0x5a,0x57,0x55,0x51,0x4e,0x4c,0x48,0x45,0x43, 0x40,0x3d,0x3a,0x38,0x35,0x33,0x30,0x2e,0x2b,0x29,0x27,0x25,0x22,0x20,0x1e,0x1c,0x1a,0x18,0x16 ,0x15,0x13, 0x11,0x10,0x0e,0x0d,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,0x02,0x01,0x00,0x00,0x00,0x00,0x00,0x00, //輸出電壓從最小值到0(正弦波1/4部分) 0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x02 ,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0d,0x0e,0x10, 0x11,0x13,0x15 ,0x16,0x18,0x1a,0x1c,0x1e,0x20,0x22,0x25,0x27,0x29,0x2b,0x2e,0x30,0x33,0x35,0x38,0x3a,0x3d, 0x40,0x43,0x45,0x48,0x4c,0x4e,0x51,0x55,0x57,0x5a,0x5d,0x60,0x63,0x66 ,0x69,0x6c,0x6f,0x72,0x76,0x79,0x7c,0x80}; void delay(uchar z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void triangle_out() //三角波輸出 { DAdata=triangle_tab[wavecount++]; if(wavecount>64) wavecount=0; DA_S1=0; //打開8位輸入寄存器 DA_S1=1; //關閉8位輸入寄存器 } void sine_out() //正弦波輸出 { DAdata=sine_tab[wavecount++]; DA_S1=0; //打開8位輸入寄存器 DA_S1=1; //關閉8位輸入寄存器 } void square_out() //方波輸出 { judge=~judge; if(judge==1) DAdata=0xff; else DAdata=0x00; DA_S1=0; //打開8位輸入寄存器 DA_S1=1; //關閉8位輸入寄存器 } /************1602液晶的相關函數*************/ #define lcd_ports P1 sbit rs=P2^2; sbit rw=P2^3; sbit lcden=P2^4; void write_com(uchar com) { rs=0; //置零,表示寫指令 lcden=0; lcd_ports=com; delay(5); lcden=1; delay(5); lcden=0; } void write_date(uchar date) { rs=1; //置1,表示寫數據(在指令所指的地方寫數據) lcden=0; lcd_ports=date; delay(5); lcden=1; delay(5); lcden=0; } void disp_lcd(uchar addr,uchar *temp1) { uchar num; write_com(addr); delay(1); //延時一會兒??? for(num=0;num<16;num++) { write_date(temp1[num]);//或者這樣寫write_date(*(temp1+num)); delay(1); } } void init_lcd() { //uchar num; lcden=0; //可有可無??? rw=0; //初始化一定要設置為零,表示寫數據 write_com(0x38); //使液晶顯示點陣,為下面做準備 write_com(0x0c); //初始設置 write_com(0x06); //初始設置 write_com(0x01); //清零 write_com(0x80); //使指針指向第一行第一格 disp_lcd(0x80,&lcd_hang1[3*16]); //在第一行顯示 disp_lcd(0xc0,&lcd_hang1[4*16]); //在第二行顯示 } /********************1602液晶函數聲明結束*********************/ void main() { uchar i=0; DA_S2=0; //使DAC寄存器處于直通狀態 DAdata=0; DA_S1=1; //關閉8位輸入寄存器 init_lcd(); waveform=0; TMOD=0x01; //設置定時器0為16位工作方式 IT0=1; //設置外部中斷0為下降沿觸發 ET0=1; //開定時器中斷 EX0=1; EA=1; while(1) { //DAout(0xff); //可輸出TTL波形 //DAout(0x80); //T_temp=32; } } void timer0() interrupt 1 { TH0=THtemp; TL0=TLtemp; if(waveform==0) sine_out(); else if(waveform==1) triangle_out(); else if(waveform==2) square_out(); } void key_int0() interrupt 0 { uchar keytemp; uint total_freq; //總頻率 EA=0; TR0=0; //關總中斷與定時器 delay(5); //延時夠嗎??? if(key==0) //確實有按鍵按下而引發中斷 { keytemp=P3&0xf0; //獲取P3口高四位的值 switch(keytemp) { case 0xe0: //選擇波形 waveform++; if(waveform>2) waveform=0; break; case 0xd0: //頻率按規定單位依次增加 wavefreq[waveform]++; if(wavefreq[waveform]>10) wavefreq[waveform]=1; // /*這邊要用“>10”,因為它比“=11”可靠 break; // 性更高,使加數有個上限,不會一直加下去*/ ……………………
上一篇:第一頁
下一篇:基于51單片機的等精度頻率計設計
推薦閱讀
史海拾趣
作為一家半導體公司,技術突破和創新是ELANTEC發展的核心動力。在移動通信領域,ELANTEC不斷推出具有創新性的產品和技術,如低功耗、高性能的移動通信芯片等。此外,在汽車電子、工業控制等領域,ELANTEC也取得了多項技術突破,為客戶提供了更加優質的產品和服務。
隨著業務的不斷發展和市場需求的增長,奇力新開始在全球范圍內進行布局。公司先后在亞洲、歐洲、美洲等地設立了生產基地和研發中心,提升了產能和研發能力。同時,奇力新還積極尋求與國際知名企業的合作,共同開發新產品和新技術。這些舉措不僅提升了奇力新的品牌影響力和市場競爭力,還為其未來的發展奠定了堅實的基礎。
在集成電路的封裝領域,ALD同樣展現出了強大的創新能力。公司不僅提供了塑封、PDIP、小型裝(SOIC)等常見的封裝形式,還開發出了密封陶瓷封裝(CDIP)等高性能封裝技術。這些封裝技術不僅提高了集成電路的可靠性和穩定性,還降低了生產成本,為客戶提供了更具競爭力的產品。
隨著市場需求的不斷增長,ALD不斷拓展其產品線。除了最初的CMOS線性集成電路外,公司還研發出了軌到軌運算放大器、雙斜率A/D前端轉換器、電壓比較器等一系列產品。這些產品不僅滿足了不同行業的需求,還進一步提升了ALD在電子行業的市場地位。同時,公司還針對特定應用,如醫療儀器和汽車領域,推出了定制化的解決方案,贏得了客戶的廣泛贊譽。
隨著公司業務的不斷發展,AMP公司意識到與國際伙伴合作的重要性。于是,公司積極尋求與國際知名企業的戰略合作,通過技術交流和資源共享,共同開發新型電子產品。這些國際合作不僅提升了AMP公司的技術水平,還進一步提升了其品牌影響力和國際知名度。公司因此獲得了更多海外市場的認可,實現了業務的全球化布局。
蘇州博眾半導體是博眾精工(股票代碼:688097)直屬的半導體子公司,創立于2022年。公司依托集團二十余年技術沉淀,立足于半導體領域,為客戶提供領先的、穩定的先進工藝及檢測設備。在封裝測試階段,博眾半導體在貼片(共晶、固晶)、AOI檢測等工藝流程的制造裝備上進行布局,助力客戶在芯片貼裝、檢測等工藝環節的制造過程中實現穩定生產。通過微米級、亞微米級、納米級技術研發和產品創新,博眾半導體致力于推動半導體先進制程發展和產業升級,不斷為行業提供尖端產品。
Assume I attempt to cook a steak in a microwave oven at 3.0GHz. The permittivity of round steak at this frequency is ε = ε0*40(1 - j 0.3) . How deep does the power penetrate the steak? What happens if you place your McD ...… 查看全部問答∨ |
軟件大?。?9.14M 下載地址:http://www.realview.com.cn/down-list.asp?id=584 注意:MDK中國版例程服務包請前往http://www.realview.com.cn/down-list.asp?id=585下載 RealView MDK 3.24更新說明 ================== 1. ...… 查看全部問答∨ |
兩塊板子,一塊單片機板子,一塊ARM9板子。單片機板子上沒有操作系統,ARM9板子上加載了Linux操作系統。 一方面,在ARM9板子上,需要把單片機板子通過無線傳送過來的IPv6包解析,并最終把包中應用層的數據傳給PC機服務器;另一方面,ARM9板子要接 ...… 查看全部問答∨ |
DDK6001安裝不了,總是提示 Remove: EULA,好像是說有有不需要的一個組件已經安裝,必須把它先卸載了,但是按提示操作了無數次,還是裝不了,是怎么回事呢,謝謝… 查看全部問答∨ |
最近調試流接口驅動程序出了些問題,麻煩論壇里的牛牛們指教,問題描述如下: 三星2440平臺,wince5.0,調試ADC的流接口驅動程序,我只為了測試所以很多功能都簡化了,就是往寄存器里寫一次,直接讀回,用了virtualalloc和virtualcopy函數映射地址 ...… 查看全部問答∨ |
|
書上說左邊的電路Io=Vin/R2,我能理解到根據負反饋,運放工作于虛短的狀態,R2上的電壓為Vin,根據KCL定理,Vin/R2=Io+Ir1(FET 源漏極電流),書里沒有說為什么可以忽略這個源漏極電流,想請教一下大家。 另外右邊的電路,是引入了正反饋,不能用虛 ...… 查看全部問答∨ |
|
由于 SAR ADC 的功耗隨著每一代新器件的推出而不斷降低,放大器成了功耗敏感型應用的制約因素。那么我們如何才能進一步降低功耗?在尋找可能的解決方案之前,讓我們先考慮一下 ADC 功耗降低的原因。下圖 1 直接顯示了我們 12 位、4MS ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 英飛凌發布“在中國、為中國”本土化戰略 三十而勵啟新篇
- 智慧農業:英特爾處理器驅動更加可持續、高效的農業發展
- 英偉達正在用“物理AI”,徹底顛覆自動駕駛、工業、機器人和智慧城市
- 臺積電-東京大學實驗室啟用,雙方聯手推動半導體研究和教育
- ?意法半導體大巴窯工廠落地創新冷卻系統,提升可持續發展能力
- Nordic Semiconductor聯同Omnispace和Gatehouse Satcom完成5G NB-IoT衛星演示
- 英偉達開啟“攻城略地”模式,擬在歐洲建設20座AI工廠
- 臺積電:日本JASM第二晶圓廠預計今年下半年動工
- 工信部:支持車企“60天賬期”承諾,促進產業健康發展
- 全球十大芯片代工廠最新排名!中芯國際沖擊世界第二
- 將低功耗設計進行到底——評論、轉發贏大禮!
- 芯幣競拍:感恩教師節專場
- Keysight示波器主題月有獎系列活動之 注冊大獎天天抽 搶樓踩中亦有獎
- Microchip有獎直播:VectorBlox™ SDK 報名中
- 有獎直播|ADI 慣性MEMS應用那些事
- 借助 Microchip 生態系統中的 PIC® 和 AVR® 單片機開啟嵌入式到云端之旅 系列在線研討會
- 帶你零起點入門STM32(專為嵌入式應用而開發的內核)
- 福祿克首款熱成像萬用表Fluke-279FC 即將上市!填寫問卷贏好禮嘍!
- EEWorld Datasheet 伴你同行!快來領取200芯積分福利啦~
- 泰克福袋:示伴功倍,萬能福袋派送中