久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

專注電子技術學習與研究
當前位置:單片機教程網 >> MCU設計實例 >> 瀏覽文章

用51Hei單片機開發板制作基于AD的數字電壓表

作者:佚名   來源:本站原創   點擊數:  更新時間:2011年03月22日   【字體:


/***************************************************************************
晶振:11.0592M
跳線設置:跳線設置:J2的34端插上跳線帽
  這個程序的上位機就用附帶串口調試程序,在51hei單片機開發板上實驗成功,發送01后
旋動電壓調整電位器RP2,當前電壓即可顯示在串口調試程序的接受區如上圖

         單片機上電后等待從上位機發送來的命令,同時在數碼管的前三位以十進制方式顯
示A/D采集的數值,在未收到上位機發送來的啟動A/D轉換命令之前數碼管始終顯示000。

         當收到上位機以十六進制發送來的01后,向上位機發送字符串“Turn on ad!”,同時
間隔一秒讀取一次A/D的值,然后把A/D采集回來的8位二進制數轉換為十進制數表示的

實際電壓浮點數。并且從串口發送給上位機,形如“The voltage is 3.398438V”,發送周
期也是一秒一次,同時在數碼管上也要每秒刷新現在的數值。

         當收到上位機以十六進制發送來的02后,向上位機發送字符串“Turn off ad!”,然后
停止發送電壓值,數碼管上顯示上次結束時保持的值。

         當收到上位機發來的其他任何數時,向上位機發送字符串“Error!”。         

*****************************************************************************/

由于代碼太長篇幅有限本文只列出了部分代碼,完整版本下載請到:
http://www.zg4o1577.cn/ziliao/51hei-5/AD采樣值數碼管顯示+串口發送.rar

#include<reg52.h>

#include <intrins.h>

#include<stdio.h>

#define uint unsigned int

#define uchar unsigned char

unsigned char code table[]={

0x3f,0x06,0x5b,0x4f,

0x66,0x6d,0x7d,0x07,

0x7f,0x6f,0x77,0x7c,

0x39,0x5e,0x79,0x71};

sbit diola=P2^5;

sbit dula=P2^6;

sbit wela=P2^7;

sbit adwr=P3^6;

sbit adrd=P3^7;

sbit adcs=P2^0;

uchar flag,a,flag_uart,flag_time,flag_on,num0,ad_val;

float ad_vo;

void delay(uint z)

{

         uint x,y;

         for(x=z;x>0;x--)

                   for(y=111;y>0;y--);

          P0=0xfF;
   wela=1;
         wela=0;

}

void display(uchar value)

{

         uchar shu1,shu2,shu3;

         shu1=value/100;

         shu2=value%100/10;

         shu3=value%10;

 

       

         P0=table[shu1];

   dula=1;

         dula=0;

         P0=0xff;

         P0=0xfe;

   wela=1;

         wela=0;

         delay(1);

 



         P0=table[shu2];

         dula=1;

         dula=0;

         P0=0xff;

         P0=0xfd;

         wela=1;

         wela=0;

         delay(1);

 


         P0=table[shu3];

   dula=1;

         dula=0;

         P0=0xff;

         P0=0xfb;

         wela=1;

         wela=0;

         delay(1);

}

void init()

{   adcs=0;

         diola=1;

         P1=0xff;

         diola=0;

         wela=1;

         P0=0x7f;

         wela=0;

         TMOD=0x21;

//       SCON=0x50;

         TH0=(65536-46080)/256;

         TL0=(65536-46080)%256;

         TH1=0xfd;

         TL1=0xfd;

         TR1=1;

         ET0=1;

         SM0=0;

         SM1=1;

         REN=1;

         EA=1;

         ES=1;

}

uchar get_ad()

{

         uchar adval;

         adwr=1;

         _nop_();

         adwr=0;

         _nop_();

         adwr=1;

         P1=0xff;

         adrd=1;

         _nop_();

         adrd=0;

         _nop_();

         adval=P1;

         adrd=1;

         return adval;

}

void main()

{

         init();

         while(1)

         {

                   if(flag_uart==1)

                   {

                            flag_uart=0;

                            ES=0;

                            TI=1;

                            switch(flag_on)

                            {

                                     case 0:puts("Turn on ad!\n");

                                               TR0=1;

                                               break;

                                     case 1:puts("Turn off ad!\n");

                                               TR0=0;

                                               break;

                                     case 2:puts("Error!\n");

                                               break;

                            }

                            while(!TI);

                            TI=0;

                            ES=1;        

                   }

                   if(flag_time==1)

                   {

                            flag_time=0;

                            ad_val=get_ad();

                            ad_vo=(float)ad_val*5.0/256.0;

                            ES=0;

                            TI=1;

                            printf("The voltage is %fV\n",ad_vo);

                            while(!TI);

                            TI=0;

                            ES=1;        

                   }

                   display(ad_val);        

         }        

}

void T0_time() interrupt 1

{

         TH0=(65536-46080)/256;

         TL0=(65536-46080)%256;

         num0++;

         if(num0==20)

         {

                   num0=0;

                   flag_time=1;

         }                 

}

void ser() interrupt 4

{

         RI=0;

         a=SBUF;

         flag_uart=1;

         if(a==1)

                            flag_on=0;

         else if(a==2)

                            flag_on=1;

                   else

                            flag_on=2;

}

 

 

關閉窗口

相關文章

主站蜘蛛池模板: 久久精品国产一区二区电影 | 91嫩草精品| 中文字幕在线视频免费观看 | 久久国产精品久久久久 | 午夜电影福利 | 日韩久久久久 | 精品一区二区三区在线观看 | 国产精品久久 | 福利片在线 | 一级免费看片 | 亚洲视频手机在线 | 成人在线一区二区三区 | 天堂色网 | 亚洲精品久久久一区二区三区 | 中文字幕亚洲精品 | 青青草在线播放 | 精品国产乱码久久久久久蜜臀 | 中文字幕国产一区 | 嫩草影院网址 | 国产欧美三区 | 日韩一区二区三区av | 欧美日韩一二三区 | 亚洲欧美日韩国产综合 | 91九色麻豆 | 日本黄色影片在线观看 | 成人在线一区二区 | 日韩aⅴ视频 | 精品国产一区探花在线观看 | 伊人免费视频二 | 亚洲国产精品一区二区三区 | 久久久国产一区二区三区 | 久久机热 | www视频在线观看 | 亚洲成av人影片在线观看 | 国产麻豆乱码精品一区二区三区 | 毛片视频网站 | 精品久久久久久国产 | 久久免费小视频 | 午夜免费在线电影 | 精品国产18久久久久久二百 | 日韩中文字幕免费在线 |