|
電壓表仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
0.png (17.89 KB, 下載次數: 160)
下載附件
2019-6-27 01:46 上傳
單片機源程序如下:
- //程序頭函數
- #include <reg51.h>
- //宏定義
- #define uint unsigned int
- #define uchar unsigned char
- #define Data_ADC0809 P1
- sbit ST=P3^2;
- sbit EOC=P3^3;
- sbit OE=P3^1;
- sbit N=P3^0;
- sbit W=P3^4;
- sbit DIAN = P0^7; //小數點
- /*******************************定義全局變量********************************/
- unsigned char dis[3]; //顯示數值
- unsigned char data adtab[8]=0;
- unsigned int sum=0;
- unsigned int dat=0;
- unsigned char i=0;
- unsigned char n=0;
- /*******************************通道選擇表*******************************/
- unsigned char code ad[]={0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff};
- /*******************************共陽LED段碼表*******************************/
- unsigned char code tab[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};
- // 0 1 2 3 4 5 6 7 8 9
- /****************************************************************************
- 函數功能:AD轉換子程序
- ****************************************************************************/
- //ADC0809讀取信息
- uchar ADC0809()
- {
- uchar temp=0x00;
- //初始化高阻太
- OE=0;
- //轉化初始化
- ST=0;
- //開始轉換
- ST=1;
- ST=0;
- //外部中斷等待AD轉換結束
- while(EOC==0)
- //讀取轉換的AD值
- OE=1;
- Data_ADC0809=0xff;
- 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<121;j++);
- }
- //=====================================================================================
- //=====================================================================================
- //=====================================================================================
- /****************************************************************************
- 函數功能:將0-255級換算成0.00-5.00的電壓數值
- 入口參數:i
- 出口參數:
- ****************************************************************************/
- void convdata(unsigned char dat1)
- {
- unsigned int Vo;
- Vo=dat1*1.96;
- dis[0] = Vo/100; // 個位
- dis[1] = Vo%100/10; // 小數點后一位
- dis[2] = Vo%100%10; // 小數點后兩位
- }
- /****************************************************************************
- 函數功能:數碼管顯示子程序
- 入口參數:
- 出口參數:
- ****************************************************************************/
- void display(void)
- {
- convdata(adtab[n]);
- P0=tab[dis[0]];
- P2=0xfe;
- DIAN=0;
- delay(1);
- P2=0xff;
- P0=tab[dis[1]];
- P2=0xfd;
- DIAN=1;
- delay(1);
- P2=0xff;
- P0=tab[dis[2]];
- P2=0xfb;
- DIAN=1;
- delay(1);
- P2=0xff;
- P0=tab[n];
- P2=0xf7;
- DIAN=1;
- delay(1);
- P2=0xff;
- }
- /****************************************************************************
- 函數功能:按鍵選擇對應通道輸出
- 入口參數:
- 出口參數:
- ****************************************************************************/
- uchar TDN()
- {
- if(N == 0)
- {
- delay(100);
- if(N == 0)
- {
- n++;
- if(n>7) n=0;
- }
- delay(100);
- }
- return n;
- }
- /****************************************************************************
- 函數功能:主程序
- 入口參數:
- 出口參數:
- ****************************************************************************/
- void main(void)
- {
- while(i<8)
- {
- if(W == 0)
- {
- delay(100);
- if(W == 0)
- {
- Data_ADC0809=ad[i];//選定通道
- adtab[i]=ADC0809();//將轉換結果存入數組
- i++;
- }
- delay(100);
- }
- if(N == 0)
- {
- delay(100);
- if(N == 0)
- {
-
- i=9;
- }
- delay(100);
- }
- }
- while(1) //主循環
- {
-
- if(i==9)
- {
-
- Data_ADC0809=ad[0];//選定通道
- adtab[0]=ADC0809();//將轉換結果存入數組
- n=TDN();
- display();
- }
- if(i==8)
- {
-
- n=TDN();
- display();
-
- }
- }
-
-
- }
復制代碼
所有資料51hei提供下載:
0809電壓表.rar
(49.42 KB, 下載次數: 139)
2019-6-26 11:18 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|
評分
-
查看全部評分
|