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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 13019|回復: 7
打印 上一主題 下一主題
收起左側

使用STC12C5204AD數字電壓表電子小制作程序

  [復制鏈接]
跳轉到指定樓層
樓主
ID:76686 發表于 2015-4-12 02:58 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
    這是一塊使用STC12C5204AD數字電壓表電子小制作程序,P0.0-P0.3 共陰數碼管位驅動端,P2口為共陰數碼管段a-g及dp的段驅動端口,P0、P2口設置為推挽輸出方式,段輸出加470歐限流電阻,AD為8位,轉換電壓分度5/256=0.0195312V,分流電阻為實測阻值,AD值*0.0195312v/對地分流電阻,算出分流電流,然后用分流電流*分流電阻與限流電阻之和即為要顯示的輸入電壓值。業余使用,精度已經夠用了,比那個小的指針的要準確多了。其中涉及到端口設置的地方大家對照芯片手冊更正。STC12C5204AD頭文件 網上多的是,大家搜一下就會找到的。


下面是使用STC12C5204AD數字電壓表電子小制作的源程序:
#include <STC12C52.H>  //STC12C5204AD頭文件
#include <intrins.h>   //_nop_();
#define uchar unsigned char
#define uint  unsigned int
//sfr ADC_CONTR=0XBC;//adc使能位.ADC電源控制位
sfr ADC_RES=0XBD;// adc數據高八位,即ADC值
sfr P1ASF=0X9D;//P1各端口ADC使能端
uchar led_bcd[]={0x3F,/*0*/  //共陰數碼管
          0x06,/*1*/
          0x5B,/*2*/
          0x4F,/*3*/
          0x66,/*4*/
          0x6D,/*5*/
          0x7D,/*6*/
          0x07,/*7*/
          0x7F,/*8*/
          0x6F,/*9*/
    0x00,/* */
    0x7c /*b*/
    }
    ,ad_data
    ;
uint data dis[5]={0x00,0x00,0x00,0x00,0x00},ZZ; //定義四個顯示數據單元和一個數據存儲單元
//dis[4,3,2,1,5]  顯示:12.34   5為存儲單元
/*******************************************************************/
/*  延時子程序                                                     */
/*                                                                 */
/*                                                                 */
/*******************************************************************/
void delay(uint z)    //延時子函數
{  
   uchar de1,de2;
  for(de1=z;de1>0;de1--)
  for(de2=100;de2>0;de2--);  
}
/*******************************************************/
//顯示子函數 display(h1,h2,h3,h4)
//h1,h2,h3,h4 為四位LED數碼管顯示變量
//
//
//
/*******************************************************/
void display(uchar h1,uchar h2,uchar s1,uchar s2)   ////LED顯示函數(參數:LED1,LED2,LED3,LED4)
{
// 第一個數碼管顯示數據
if(h1==0x3f) h1=0x00;   //0消隱語句
P2=h1;
  //delay(2);
P00=0;
  delay(2);   //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.
P2=0X00;
P00=1;
/*******************************************************/
// 第二個數碼管顯示數據
P2=h2|0x80;
  //delay(2);
P01=0;
  delay(2);  //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.
P2=0X00;
P01=1;
//delay(5);
/*******************************************************/
// 第三個數碼管顯示數據
P2=s1;
  //delay(2);
P02=0;
  delay(2); //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.
  P2=0X00;
    P02=1;
// delay(5);
/*******************************************************/
// 第四個數碼管顯示數據
P2=s2;
  //delay(2);
P03=0;
  delay(2); //參數2-10   數值大LED亮度高但閃爍感強,數值小LED亮度低,但閃爍感小.
  P2=0X00;
P03=1;
//delay(5);
}
void init()//系統初始化函數
{
P2M1=0Xff; //強推挽   推動a-g dp
P2M0=0X00; //強推挽   推動a-g dp
P0M1=0X0f; //強推挽   推動位
P0M0=0X00; //強推挽   推動位
P0=0XFF;   //初始化
P2=0;    //初始化
/***定時器0初始化設置*****/  
TMOD = 0x01;
    TH0 = 0xFC;  //初值1ms
    TL0 = 0x18;  //初值1ms
    EA = 1;   //開總中斷
    ET0 = 1;  //定時器0中斷打開
    TR0 = 1;  //打開定時器 開始計時
/*************************/
ZZ=0;
}
void initADC()  //AD初始化
{
P1ASF=0x01;//只使用P1.0端口做為ADC輸入端.
ADC_RES=0;//ADC數據寄存器清零
ADC_CONTR=ADC_POWER|ADC_SPEEDLL;  //打開ADC開關并設置 轉換速率詳見STC12C52.H
delay(2);  //打開ADC并延時.
}
uchar readADC()   //讀AD
{
ADC_CONTR=ADC_POWER|ADC_SPEEDLL|0|ADC_START;
_nop_();
_nop_();
_nop_();
_nop_();
while(!(ADC_CONTR&ADC_FLAG));//等待轉換完成標志
ADC_CONTR&=~ADC_FLAG;//close ADC
return ADC_RES;//返回ADC值.
}
void main()
{
init();
initADC();//初始化ADC
ad_data=readADC();//開機轉換
while(1)
{
  float j;
  uchar ad_data;
  while(ZZ>=500) //500毫秒讀一次ADC
  {
   ad_data=readADC();//讀入ADC數據
   ZZ=0;
  }
  j=ad_data*19.5312;//由AD數據*19.5312(放大1000倍)=分流后的電壓
  j=j/9890; //j(電壓)/接地電阻(實測)9890歐
  j=j*60190;//j(電流)*(輸入限流電阻(實測)60190歐+接地電阻(實測)9890歐) 計算出實際輸入電壓 如果使用高精度電阻,則直接輸入電阻值
  dis[4]=j/1000;
  dis[3]=dis[4]/10;
  dis[2]=dis[4]%10;
  //h=(h-(dis[3]*10+dis[2]))*100;
  dis[4]=j/10-dis[4]*100;
  //dis[4]=j%100;//小數位第一位
  dis[1]=dis[4]/10;
  dis[0]=dis[4]%10;//小數位第二位
  //delay(10000);
}
}
void Timer0Interrupt(void) interrupt 1
{
    ZZ++;   //AD讀取間隔時間控制
TH0 = 0xFC;
    TL0 = 0x18;
display(led_bcd[dis[3]],led_bcd[dis[2]],led_bcd[dis[1]],led_bcd[dis[0]]);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏8 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:73679 發表于 2015-6-29 14:52 | 只看該作者
樓主,改用1602可以嗎?怎么樣改
回復

使用道具 舉報

板凳
ID:59572 發表于 2018-7-19 23:11 | 只看該作者
樓主要是有圖就更好了
回復

使用道具 舉報

地板
ID:412814 發表于 2018-10-23 07:33 | 只看該作者
同時顯示兩路電壓應該怎樣改呢?謝謝
回復

使用道具 舉報

5#
ID:56204 發表于 2018-10-25 05:39 來自手機 | 只看該作者
不錯,先標記一下
回復

使用道具 舉報

6#
ID:594214 發表于 2019-8-17 10:25 | 只看該作者
不錯,先標記一下
回復

使用道具 舉報

7#
ID:601215 發表于 2019-8-18 00:22 來自手機 | 只看該作者
不錯,挺好的
回復

使用道具 舉報

8#
ID:282095 發表于 2019-8-18 09:14 | 只看該作者
這個用來上手還是蠻不錯的
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产欧美 | 欧美黄色网 | 中文字幕亚洲视频 | 91在线精品视频 | 欧美日韩精品一区二区三区蜜桃 | 欧美一级视频 | 久久久久久久久精 | 日韩影院在线观看 | 久久久久久国产精品久久 | 久草免费在线视频 | 久久四虎| 天堂三级| 久久久日韩精品一区二区三区 | 天堂网中文| 伊人色综合久久天天五月婷 | 欧美精品在线一区二区三区 | 国产欧美精品一区二区三区 | 麻豆久久久久久久 | 亚洲精品一区av在线播放 | 日本一区二区三区视频在线 | 久久91精品国产一区二区 | h小视频| 99re视频在线观看 | 成人在线观看中文字幕 | 成人av一区二区三区 | 久草视频在 | 欧美成人精品一区二区男人看 | 精品久久网 | 国产欧美精品一区二区色综合朱莉 | 91精品国产乱码久久久久久久 | 久久久国产精品入口麻豆 | 日日摸夜夜添夜夜添精品视频 | 婷婷丁香综合网 | 久久精品一 | 伊人在线 | 精品国产欧美一区二区三区成人 | 欧美综合一区二区三区 | 精品国产乱码久久久久久88av | 日本一二三区高清 | 久久久久精| www.久久99 |