做了一個關于數字電壓表的課程設計,已經驗收
電路原理圖如下:
0.png (41.96 KB, 下載次數: 34)
下載附件
2018-9-24 02:14 上傳
電路原理圖如下:
目錄.PNG (133.82 KB, 下載次數: 29)
下載附件
論文目錄
2018-9-24 00:58 上傳
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (18.95 KB, 下載次數: 22)
下載附件
2018-9-24 02:14 上傳
0.png (12.25 KB, 下載次數: 34)
下載附件
2018-9-24 02:15 上傳
c源碼
- #include<AT89X52.h>
- #define uchar unsigned char
- #define uint unsigned int
- uint a1,b1,ge,fen,fen1;
- uchar t,dispcount,count=0,flag=0;
- uchar dispbuf[4]={0,0,0,0};// 0x76,0x3f,0x3f,0x4f
- uchar code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0Xff};
- sbit W0=P3^5; //
- sbit W1=P3^4; //
- sbit W2=P3^3; //
- sbit W3=P3^2; //數碼管位選
- sbit PIN=P1^7;
- sbit st=P2^4; sbit ale=P2^3; //通道控制
- sbit oe=P2^5; //輸出控制
- sbit eoc=P3^7; //轉換結束標志
- sbit a=P2^0; //
- sbit b=P2^1; //
- sbit c=P2^2; //通道選擇
- sbit k1=P3^0; //功能轉換鍵
- sbit k2=P3^1; //通道選擇鍵
- void delay(uchar x)
- {
- uint a,b;
- for(a=x;a>0;a--)
- for(b=110;b>0;b--);
- }
- void xz()//通道選擇
- {
- if(t==0)
- {
- a=0;b=0;c=0;
- ale=1;
- delay(1);
- ale=0; }
- if(t==1)
- {a=1;b=0;c=0;
- ale=1;
- delay(1);
- ale=0; }
- if(t==2)
- {a=0;b=1;c=0;
- ale=1;
- delay(1);
- ale=0; }
- if(t==3)
- {
- a=1;b=1;c=0;
- ale=1;
- delay(1);
- ale=0; }
- if(t==4)
- {
- a=0;b=0;c=1;
- ale=1;
- delay(1);
- ale=0; }
- if(t==5)
- {
- a=1;b=0;c=1;
- ale=1;
- delay(1);
- ale=0;
- }
- if(t==6)
- {
- a=0;b=1;c=1;ale=1;
- delay(1);
- ale=0;
- }
- if(t==7)
- {a=1;b=1;c=1;ale=1;
- delay(1);
- ale=0;
- }
- }
- void aj()//按鍵
- {
- if(k1==0)
- {
- delay(2);
- if(k1==0)
- TR1=!TR1; //定時器1 使能取反
- while(!k1);
- }
- if(TR1==0)
- {
- if(k2==0)
- {
- delay(5);
- if(k2==0)
- {
- t++;
- if(t==8)
- t=0;
- }
- while(!k2);
- }
- }
- }
- void du()//讀數據
- {
- uchar tmp;
- st=1;
- st=0;
- delay(1); //這里必須延時給硬件處理時間if(eoc==1) //轉換結束標志
- {
- oe=1; //轉換結束輸出控制
- delay(1);
- tmp=P0;
- oe=0;
- delay(1);
- }
- if(tmp>=255)
- {
- flag=1;
- }
- else
- {
- flag=0;
- }
- ge=tmp/51;
- a1=(tmp%51)*10;
- fen=a1/51;
- b1=(a1%51)*10;
- fen1=b1/51;
- dispbuf[0]=dispcode[t];
- dispbuf[1]=dispcode[ge];
- dispbuf[2]=dispcode[fen];
- dispbuf[3]=dispcode[fen1];
- }
- void init()//初始化
- {
- EA=1;
- ET1=1;
- TMOD=0x10;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- T2MOD=0x00;
- T2CON=0x04; TR2=1 ;RCAP2L=(65536-4000)%256;
- RCAP2H=(65536-4000)/256;
- TR2=1; //打開定時器中斷1,2
- ET2=1;
- W0=1;
- W1=1;
- W2=1;
- W3=1;
- ale=0;
- oe=0;
- st=0;
- t=0;k1=1;k2=1;
- }
- void as() interrupt 3 using 0 {
- uchar a;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- a++;
- if(a==20)
- {
- a=0;
- t++;
- if(t==8)
- t=0;
- }
- }
- void main()
- {
- init();
- while(1)
- {
- aj();
- xz();
- du();
- // xs();
- }
- }
- void t1(void) interrupt 5 using 0
- {
- TF2=0; //T2定時器必須用軟件清0
- P1=dispbuf[dispcount]; //控制數碼管顯示
- if (dispcount==0)
- {
- W0=0;
- W1=1;
- W2=1;
- W3=1;
- }
- if(dispcount==1)
- { PIN=0;
- W0=1;
- W1=0;
- W2=1;
- W3=1;
- }
- if(dispcount==2)
- {
- PIN=1;
- W0=1;
- W1=1;
- W2=0;
- W3=1;
- }
- if(dispcount==3)
- {
- W0=1;W1=1;W2=1;W3=0;
- }
- dispcount++;
- if(flag==1)
- count++;
- if(dispcount==4) dispcount=0;
- }
復制代碼
全部資料51hei下載地址:
51上傳.zip
(975.31 KB, 下載次數: 85)
2018-9-24 00:46 上傳
點擊文件名下載附件
內附有原理圖,c源碼,仿真圖,pcb文件(已連好線),和課程設計論文模板 下載積分: 黑幣 -5
|