這里面包含了波形發生器和電子密碼鎖的防真及程序,暫時只是部分圖片瀏覽詳細大家可以去看壓縮包。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
原理圖.png (12.93 KB, 下載次數: 36)
下載附件
2018-3-26 09:33 上傳
工.png (12.91 KB, 下載次數: 37)
下載附件
2018-3-26 09:33 上傳
fuwei.png (7.66 KB, 下載次數: 54)
下載附件
2018-3-26 09:34 上傳
0.png (45.55 KB, 下載次數: 61)
下載附件
2018-3-26 17:00 上傳
所有資料51hei提供下載:
caiwenjun.rar
(253.27 KB, 下載次數: 35)
2018-3-26 09:32 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
單片機源程序如下:
-
- #include<reg52.h>
- #define uchar unsigned char
- #define uint unsigned int
- sbit csda=P3^2; //定義DA的CS端口
- sbit wr=P3^6;
- //定義DA的WR端口
- sbit s1=P3^4;
- sbit s2=P3^5; //定義兩個按鍵
- uchar k=0,p=0,delay=0;
- uchar bxxz=0;pinglv=0;
- uchar a=1,b=0,c=0,d=0,e=0;
- uchar code sin[64]={
- 135,145,158,167,176,188,199,209,218,226,234,240,245,249,252,254,254,253,251,247,243,237,230,222,213,204,193,182,170,158,
- 146,133,121,108,96,84,72,61,50,41,32,24,17,11,7,3,1,0,0,2,5,9,14,20,28,36,45,55,66,78,90,102,114,128
- }; //正弦波
- uchar code juxing[64]={
- 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,255,
- 255,255,255,255,255,255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
- }; //矩形波
- uchar code juchi[64]={
- 0,4,8,12,16,20,24,28,32,36,40,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,130,134,138,142,
- 146,150,154,158,162,166,170,174,178,182,186,190,194,198,202,206,210,215,219,223,227,231,235,239,243,247,251,255
- }; //鋸齒波
- uchar code tixing[64]={
- 0,13,26,39,52,65,78,91,104,117,130,143,156,169,182,195,208,221,234,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,247,
- 247,247,247,247,247,247,247,242,229,216,203,190,177,164,151,138,125,112,99,86,73,60,47,34,21,8
- }; //梯形波
- uchar code sanjiao[64]={
- 0,8,16,24,32,40,48,56,64,72,80,88,96,104,112,120,128,136,144,152,160,168,176,184,192,200,208,216,224,232,240,248,
- 248,240,232,224,216,208,200,192,184,176,168,160,152,144,136,128,120,112,104,96,88,80,72,64,56,48,40,32,24,16,8,0
- }; //三角波
- void delay1()
- {
- int a,b;
- for(a=1;a>0;a--)
- for(b=122;b>0;b--); //延時函數
- }
- void key1(void) //頻率選擇,獨立按鍵1
- {
- if(s1==0)
- {
- delay1();
- if(s1==0) //按鍵按下
- {
- p++; //p頻率選擇參數
- if(p==8)
- p=0;
- switch(p)
- {
- case 1 :
- pinglv=3;
- break;
- case 2 :
- pinglv=6;
- break;
- case 3 :
- pinglv=9;
- break;
- case 4 :
- pinglv=12;
- break;
- case 5 :
- pinglv=15;
- break;
- case 6 :
- pinglv=18;
- break;
- case 7 :
- pinglv=21;
- break;
- default :
- pinglv=0;
- break;
- }
- while(!s1); ///等待按鍵松開
- }
- }
- }
- void key2(void) //波形選擇,按鍵2
- {
- if(s2==0)
- {
- delay1();
- if(s2==0)
- {
- bxxz++; //波形類型++
- if(bxxz==5)
- bxxz=0;
- switch(bxxz)
- {
- case 0 :
- {a=1,b=0,c=0,d=0,e=0;}
- break;
- case 1 :
- {a=0,b=1,c=0,d=0,e=0;}
- break;
- case 2 :
- {a=0,b=0,c=1,d=0,e=0;}
- break;
- case 3 :
- {a=0,b=0,c=0,d=1,e=0;}
- break;
- case 4 :
- {a=0,b=0,c=0,d=0,e=1;}
- break;
- }
- delay1();
- while(!s2); //等待按鍵松開
- }
- }
- }
- void keyscan(void)
- {
- key1(); //頻率
- key2(); //波形
- }
- /*----------------------main----------------*/
- /*----------------------main----------------*/
- /*----------------------main----------------*/
- /*----------------------main----------------*/
- /*----------------------main----------------*/
- /*----------------------main----------------*/
- void main()
- {
- csda=0; //選通DAC0832
- wr=0; //WR有效
- while(1)
- {
- keyscan(); //調用按鍵掃描
- if(a)
- {
- delay=pinglv;
- P0=sin[k];
- k++;
- if(k==64)
- k=0;
- while(delay)
- delay--;
- }
- if(b)
- {
- delay=pinglv;
- P0=juxing[k];
- k++;
- if(k==64)
- k=0;
- while(delay)
- delay--;
- }
- if(c)
- {
- delay=pinglv;
- P0=juchi[k];
- k++;
- if(k==64)
- k=0;
- while(delay)
- delay--;
- }
- if(d)
- {
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
|