1、信号源(正弦波,三角波,锯齿波,方波,步进10HZ,0.1V)
2009-08-27 19:14:00| 分类: 默认分类|字号 订阅
#include
2、mm,gao,di,temp,k1num,k2num,num,Anum,Fnum; uchar bai,shi,ge,Fbai,Fshi,Fge,date2,Ashi,Age; uchar code tbsin[]= {128,144,160,175,190,203,216,227,236,244,250,254,255,255,254,250,244,236, 227,216,203,190,175,160,144,128,112,96,81,66,53,40,29,20,12,6,2,0,0,2,6,12, 20,29,40,53,66,81,96,112}; uchar
3、code tbsanjiao[]= {0,10.625,21.25,31.875,42.5,53.125,63.75,74.375,85,95.625,106.25, 116.875,127.5,138.125,148.75,159.375,170,180.625,191.25,201.875,212.5 ,223.125,233.75,244.375,255,255,244.375,233.75,223.125,212.5,201.875, 191.25,180.625,170,159.375,148.75,138.125,127.5,116.875,106.25,95.625,85
4、 74.375,63.75,53.125,42.5,31.875,21.25,10.625,0,}; uchar code tbjuchi[]= {0,5,10,16,21,26,31,36,42,47,52,57,62,68,73,78,83,88,94,99,104,109,115,120,125, 130,135,141,146,151,156,161,167,172,177,182,187,193,198,203,208,213,219,224,229, 234,239,245,250,255,}; uchar code tbfangbo[]= {0,0,0,0,0,0
5、0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255,255,255, 255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255}; uchar code tbDAC2[]= {1,5,10,16,21,26,31,36,42,47,52,57,62,68,73,78,83,88,94,99,104,109,115,120,125, 130,135,141,146,151,156,161,167,172,177,182,187,193,1
6、98,203,208,213,219,224,229, 234,239,245,250,255,}; uchar code tbF[]= {56,74,89,102,113,123,131,138,145,151,156,161,165,169,173,176,179,182,185,187,189, 191,194,195,197,199,200,202,203,205,206,207,208,209,211,212,213,213,214,215,216}; void delay(uint z)//延时 { uint x,y; for(x=z;x>0;x--)
7、 for(y=110;y>0;y--); } void write_com(uchar com)//LCD写命令 { rs=0; rw=0; en=0; P1=com; delay(2); en=1; delay(2); en=0; } void write_date( uchar date)//LCD写数据 { rs=1; rw=0; en=0; P1=date; delay(2); en=1; delay(2);
8、 en=0; } void lcd_wr_str(uchar i,uchar *date)//写一个字符串 { if(i==0) { write_com(0x80); while(*date!='\0') { write_date(*date); date++; delay(5); } } if(i==1) { write_com(0x80+0x40); while(*date!='\0') { write_date(*date); date++; delay(5
9、); } } } void init()//初始化 { TMOD=0x02; TH0=56; TL0=56; EA=1; ET0=1; TR0=1; en=0; write_com(0x38); write_com(0x06); write_com(0x0f); write_com(0x0c); write_com(0x80); write_com(0x01); write_com(0x80+5); delay(5); lcd_wr_st
10、r(0," Press K1"); lcd_wr_str(1," Chose One Wave"); } void timer0() interrupt 1//中断 { switch (k1num) { case 1:{num++;if(num==50)num=0;DAC1=tbsin[num]; }break;//正弦波 case 2:{num++;if(num==50)num=0;DAC1=tbsanjiao[num];}break;//三角波 case 3:{num++;if(num==50)num=0;DAC1=tbjuchi[
11、num]; }break;//锯齿波 case 4:{num++;if(num==50)num=0;DAC1=tbfangbo[num]; }break;//方波 } } void sel_wave(void) { if(k1==0)//选择波形 { TR0=0; delay(5); if(k1==0) { while(!k1); delay(5); k1num++; if(k1num==5) { k1num=0; } } } TR0=1; } void s
12、el_FV()//选择调幅 调频 { TR0=0; if(k2==0) { delay(10); if(k2==0) { while(k2==0); k2num++; if(k2num==3)k2num=0; } } TR0=1; } void keyadd() { if(k3==0) { delay(10); if(k3==0) { while(!k3); if(k2num==1)//调幅+ { DAC2=tbDAC2[Anum];
13、 Anum++; if(Anum==50)Anum=0; write_com(0x01); lcd_wr_str(0," tbDAC2[Anum]/10 . tbDAC2[Anum]%10 V"); } else if(k2num==2) //调频+ { //while(!k3); Fnum++; TH0=tbF[Fnum]; if(Fnum==50)Fnum=0;
14、 write_com(0x01); lcd_wr_str(1," tbDAC2[Anum]/100 tbDAC2[Anum]/10%10 tbDAC2[Anum]%10 F"); } } } } void keysub() { if(k4==0) { delay(10); if(k4==0) { if(k2num==1)//调幅-- { DAC2=tbDAC2[Anum]; Anum
15、 if(Anum==0)Anum=50; write_com(0x01); lcd_wr_str(0," tbDAC2[Anum]/10 . tbDAC2[Anum]%10 V"); } else if(k2num==2) //调频-- { TH0=tbF[Fnum]; Fnum--; if(Fnum==0)Fnum=50; write_com(0x01); lcd_wr_str(1," tbDAC2[Anum]/100 tbDAC2[Anum]/10%10 tbDAC2[Anum]%10 F"); } } while(!k4); } } void main() { init(); DAC2=0xff; while(1) { sel_wave(); sel_FV(); keyadd(); keysub(); } }






