|
自己用了大半個月時間所做的數字電壓表;
1、采用數碼管顯示
2、可測電壓0V-25V;25V-50V、兩檔位超出量程可報警。顯示精度0.01V,與精確率0.2V.
3、采用ADC0809數碼轉換芯片
4、采用CD4017進行分頻
(附件帶keil源程序、AD原理圖、裝配圖、proter仿真圖)整整一套完整的材料都在附件中
................................................................................................................................................................................................................................
都是自己設計原創,請大家多多指教!
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (16.5 KB, 下載次數: 75)
下載附件
2019-7-10 19:06 上傳
Altium Designer畫的原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png (27.25 KB, 下載次數: 89)
下載附件
2019-7-10 19:07 上傳
0.png (49.3 KB, 下載次數: 69)
下載附件
2019-7-10 19:07 上傳
0.png (15.93 KB, 下載次數: 81)
下載附件
2019-7-10 19:07 上傳
單片機源程序如下:
- //程序頭函數
- #include <reg52.h>
- //宏定義
- #define uint unsigned int
- #define uchar unsigned char
- #define Data_ADC0809 P1
- //ADC0809
- sbit ST=P3^2;
- sbit EOC=P3^3;
- sbit OE=P3^1;
- sbit k1=P3^5;
- sbit k2=P3^4;
- sbit DIAN = P0^7; //小數點
- sbit beep = P3^0; //蜂鳴器IO口定義
- /*******************************定義全局變量********************************/
- unsigned char dis[3]; //顯示數值
- unsigned int sum=0;
- unsigned int temp=0;
- unsigned int dat=0;
- unsigned int Vo;
- uint a;
- /*******************************共陰LED段碼表*******************************/
- unsigned char code tab[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x92,0x82,0xf8, 0x80,0x90/*字母U*/}; //gc.debfa
- /****************************************************************************
- /****************報警函數***************/
- //ADC0809讀取信息
- uchar ADC0809()
- {
- uchar temp_=0x00;
- //初始化高阻太
- OE=0;
- //轉化初始化
- ST=0;
- //開始轉換
- ST=1;
- ST=0;
- //外部中斷等待AD轉換結束
- while(EOC==0)
- //讀取轉換的AD值
- OE=1;
- temp_=Data_ADC0809;
-
- OE=0;
- return temp_;
- }
- /****************************************************************************
- 函數功能:延時子程序
- 入口參數:
- 出口參數:
- ****************************************************************************/
- void delay(unsigned int x)
- {
- unsigned int i,j;
- for(i=0;i<x;i++)
- for(j=0;j<50;j++);
- }
- //=====================================================================================
- //=====================================================================================
- //=====================================================================================
- /****************************************************************************
- 函數功能:將0-255級換算成0.00-5.00的電壓數值
- 入口參數:i
- 出口參數:
- ****************************************************************************/
- void convdata(unsigned char dat1)
- {
- if(k1==0)
- {
- delay(10);
- if(k1==0)
- {
- a=1;
- // while(!k1);
- }
- }
- if(k2==0)
- {
- delay(10);
- if(k2==0)
- {
- a=2;
- // while(!k2);
- }
- }
- Vo=dat1*5*1.96*a;
- dis[0]=Vo/1000;
- dis[1] = Vo/100%10; //十位
- dis[2] = Vo%100/10; //個位
- dis[3] = Vo%100%10; //小數點后第1位
- if(a==1)
- {
- if(dis[0]>=2)
- {
- if(dis[1]>=4)
- {
- beep=1;
- }
- }
- }
- if(a==2)
- {
- if(dis[0]>=4)
- {
- if(dis[1]>=9)
- {
- beep=1;
- }
- }
- }
- if(dis[0]==0)
- {
- if(dis[1]==0)
- {
- beep=0;
- }
- }
- }
- /****************************************************************************
- 函數功能:數碼管顯示子程序
- 入口參數:
- 出口參數:
- ****************************************************************************/
- void display(void)
- {
- P0=tab[dis[0]];
- P2=0xbf; //10111112
- delay(1);
- P2=0xff;
- P0=tab[dis[1]];
- P2=0xef; //11101111
- DIAN=0;
- delay(1);
- P2=0xff;
- P0=tab[dis[2]];
- P2=0xfb; //11111011
- delay(1);
- P2=0xff;
- P0=tab[dis[3]]; //11111110
- P2=0xfe;
- delay(1);
- P2=0xff;
- }
- /****************************************************************************
- 函數功能:主程序
- 入口參數:
- 出口參數:
- ****************************************************************************/
- void main(void)
- {
- unsigned char p=0;
- a=1;
- beep=0;
- while(1) //主循環
- {
- for(p=0;p<20;p++)
- {
- sum=sum+ADC0809();
- display();
- }
- // dat=((sum/20)+dat)/2;
- dat=sum/20;
- convdata(dat); //數據轉換
- sum=0;
- display(); //顯示數值
- }
- }
復制代碼
所有資料51hei提供下載:
“直流數顯電壓表”程序、原理圖、仿真圖.7z
(603.08 KB, 下載次數: 115)
2019-7-10 19:08 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|