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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 3018|回復(fù): 5
收起左側(cè)

求將三位數(shù)碼顯示改為四位數(shù)碼顯示

[復(fù)制鏈接]
ID:126608 發(fā)表于 2018-2-19 09:18 | 顯示全部樓層 |閱讀模式
/* 原程序是本壇下載的。  采用STC15W408AS單片機(jī)。12M晶振。三位數(shù)碼管顯示電壓值。想改為四位數(shù)碼管顯示電壓值。雖受限于單片機(jī)的AD轉(zhuǎn)換精度是10位的,用5V電源,
分辨率只有5MV.要改為四位顯示,線路板已做好四位的。程序沒(méi)有改成功,現(xiàn)在顯示四個(gè)零,希望得到指導(dǎo)。有2.5V的431取樣電路P14,ADC是P15。
*/
                                             
#include "STC15F408.h"
#include <intrins.h>

#define uchar unsigned char  
#define uint  unsigned int   


#define ADC_POWER  0x80                   //AD電源控制位
#define ADC_FLAG 0x10                           //轉(zhuǎn)換結(jié)束標(biāo)志位。1 結(jié)束
#define ADC_START 0x08                           //開(kāi)始轉(zhuǎn)換位
#define ADC_SPEEDLL 0x00                  //轉(zhuǎn)換速度540個(gè)時(shí)鐘
uchar ADC_POSITION;               //0x00 AD通道位置P1.0, 0x01 AD通道位置P1.1

sbit bai=P1^3;//改動(dòng)過(guò)
sbit shi=P1^2;
sbit ge=P1^1;
sbit sf=P1^0;
uchar s1,sec;
uint adval=0;                   //AD轉(zhuǎn)換值
uint  show;            //電壓值
uint  show1;                     //基準(zhǔn)電壓

uchar code table[]={0x28,0xeb,0x32,0xa2,0xe1,
0xa4,0x24,0xea,0x20,0xa0};          //P3數(shù)碼管數(shù)字0-9
uchar code table1[]={0x08,0xcb,0x12,0x82,0xc1,
0x84,0x04,0xca,0x00,0x80};          //P3數(shù)碼管數(shù)字0-9帶小數(shù)點(diǎn)

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

系統(tǒng)初始化
*****************************************/
void system_init(void)
{
   
   TMOD=0x01;                        //定時(shí)器0工作在方式1,的定時(shí)模式
   ET0=1;                            //定時(shí)器0中斷允許
   EA=1;                             //系統(tǒng)中斷允許
   TR0=1;                            //定時(shí)器1和定時(shí)器0開(kāi)始定時(shí)
   TH0=(65536-30000)/256;                       //定時(shí)器0的初值30ms
   TL0=(65536-30000)%256;                                 
   sec=59;
   P3M1=0x00;//改動(dòng)過(guò)
   P3M0=0x00;//
   P5M1=0x00;//
   P5M0=0x00;//
   P1M1=0x30;//
   P1M0=0x3f;//
}
/********************************************************
* 函數(shù)名稱(chēng):delay
* 輸    入:z 延時(shí)時(shí)間
* 輸    出:無(wú)
* 功能描述: 毫秒級(jí)延時(shí)
********************************************************/
void delay(uchar n) //延時(shí)n ms
{  
    uchar a,b,c;
    for(c=n;c>0;c--)
        for(b=222;b>0;b--)
            for(a=12;a>0;a--);
}

/********************顯示電壓值***************************/

void display()
{  
  uchar c,d,e,q,f;//q是后加的
  uint         su;
  if(show1>850)
     c=d=e=q=10;//q=是后加的
  else
     {
      su=show;
          c=su/100;                    //分離各位數(shù)值
          f=su%100;
          d=f/10;   
          e=f%10;
                q=f%100;         //后加的
         }
  P3=table1[c];                                                  //顯示百位

  bai=1;
  delay(5);
  bai=0;
       
  P3=table[d];                                        //顯示十位
;
  shi=1;
  delay(5);
  shi=0;
       
  P3=table[e];                                        //顯示個(gè)位

  ge=1;
  delay(5);
  ge=0;
       
         P3=table[q];                                        //顯示十分位//后加的

  sf=1;//后加的
  delay(5);//后加的
  sf=0; //后加的
}

/*****************************************************
** 函數(shù)名稱(chēng): void adc_isr() interrupt 5
** 功能描述: AD中斷,獲取AD數(shù)據(jù)
** 輸   入: 無(wú)
** 輸   出: show
** 全局變量: show
** 調(diào)用模塊: Delay_ms
********************************************************/
get_ad()
{                   
        ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ADC_START|ADC_POSITION;     //啟動(dòng)ADC轉(zhuǎn)換
        _nop_();
        _nop_();
        _nop_();
        _nop_();
                                                             //默認(rèn)ADRJ=0; 高8位+低2位
            while(!(ADC_CONTR & ADC_FLAG));                      //等待ADC轉(zhuǎn)換結(jié)束

        ADC_CONTR &= ~ADC_FLAG;                              //必須軟件清0
            adval=ADC_RES;                                       //00000000 00000011  高8位
            adval=ADC_RES<<2|ADC_RESL;                           //00000011 11111111 右對(duì)齊 高8位+低2位         // a|b;                                    
                adval=adval/1.024;        
        return (adval);
}

/******************取20次AD轉(zhuǎn)換值 求平均值*****************/
AD_work()
{
        uint advalf=0;                    //定義處理后的數(shù)值A(chǔ)D_val為浮點(diǎn)數(shù)
        uchar i;
        for(i=0;i<50;i++)
           {
                advalf=advalf+get_ad();   //轉(zhuǎn)換20次求平均值(提高精度)
                delay(2);
                }                  
        advalf=advalf/50;
        return advalf;
}
/*****************************************           
定時(shí)器中斷子程序  
*****************************************/  
void Timer0_PL()  interrupt 1         //頻率定時(shí)器0中斷
  
{  
TH0=(65536-20000)/256;                 //定時(shí)器0的初值20ms
TL0=(65536-20000)%256;
s1++;
display();                                                      //顯示
if(s1==25)
    {
        s1=0;
    sec++;
        }
if(sec==60)
    {
        sec=0;
        ADC_POSITION=0x05; //ADC輸入選擇改動(dòng)過(guò)
        show1=get_ad();
        }                                          
}                          
/******************************************************
** 函數(shù)名稱(chēng): void InitADC()
** 功能描述: 初始化AD功能
** 輸   入: 無(wú)
** 輸   出: 無(wú)
** 全局變量: 無(wú)
** 調(diào)用模塊: Delay_ms
*********************************************************/
void InitADC()
{
P1ASF = 0x30;                                                                                             //使能P1.5,p1.4為AD輸入改動(dòng)過(guò)
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = ADC_POWER|ADC_SPEEDLL|ADC_START|ADC_POSITION;     
// IE = 0xa0;  
delay(10);
}



/**************************主函數(shù)***********************/
main()
{  
system_init();
InitADC();

while(1)
   {
   show=AD_work();  //讀取AD值
   }
}
回復(fù)

使用道具 舉報(bào)

ID:283491 發(fā)表于 2018-2-20 15:29 | 顯示全部樓層
這個(gè)簡(jiǎn)單,
回復(fù)

使用道具 舉報(bào)

ID:283491 發(fā)表于 2018-2-20 15:34 | 顯示全部樓層

在前面定義的時(shí)候多定義一個(gè)qian,再吧顯示函數(shù)換成下面這個(gè),就ok了






void display()
{  
  uchar c,d,e,g,q,f;//q是后加的
  uint         su;
  if(show1>850)
     c=d=e=q=10;//q=是后加的
  else
     {
      su=show;
         g=su/1000;
          c=su/100;                    //分離各位數(shù)值
          f=su%100;
          d=f/10;   
          e=f%10;
                q=f%100;         //后加的
         }
  P3=table1[g];                                                //顯示千位

  qian=1;
  delay(5);
  qian=0;

  P3=table1[c];                                                  //顯示百位

  bai=1;
  delay(5);
  bai=0;
        
  P3=table[d];                                        //顯示十位
;
  shi=1;
  delay(5);
  shi=0;
        
  P3=table[e];                                        //顯示個(gè)位

  ge=1;
  delay(5);
  ge=0;
        
         P3=table[q];                                        //顯示十分位//后加的

  sf=1;//后加的
  delay(5);//后加的
  sf=0; //后加的
}
回復(fù)

使用道具 舉報(bào)

ID:111634 發(fā)表于 2018-2-20 18:23 | 顯示全部樓層
把第4位數(shù)字再處理顯示就行了。
回復(fù)

使用道具 舉報(bào)

ID:126608 發(fā)表于 2018-2-20 19:21 | 顯示全部樓層
改成四位數(shù)碼管的問(wèn)題,按您教的方法解決了,非常感謝。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲高清一区二区三区 | 91av免费看 | 欧美久久一区二区三区 | av片毛片 | 久久精品亚洲国产奇米99 | 亚洲一区二区三区四区五区午夜 | 欧美极品在线观看 | 亚洲欧美精品在线观看 | 国产成人99久久亚洲综合精品 | 国产精品久久久久久久久久久久冷 | 99热精品国产 | 福利久久 | 免费观看羞羞视频网站 | 国产视频在线一区二区 | 欧美又大粗又爽又黄大片视频 | 久久久久久国产精品免费免费狐狸 | 精品日韩 | 久久国产精品久久久久久久久久 | 亚洲欧美日韩电影 | 国产剧情一区 | 中文字幕免费中文 | 久久国产激情视频 | 在线免费观看黄网 | 日本不卡免费新一二三区 | 久久午夜视频 | 婷婷国产一区 | 91视频官网 | 国产精品久久久久久久久免费丝袜 | 欧美一区二区三区大片 | 国产一级大片 | 请别相信他免费喜剧电影在线观看 | 国产精品美女久久久久aⅴ国产馆 | 国产在线视频一区二区董小宛性色 | 亚洲国产欧美一区 | 欧美一区二区 | 区一区二区三在线观看 | 欧美精品一区二区三区一线天视频 | 亚洲成av人片在线观看无码 | 亚洲欧美一区二区三区国产精品 | 视频一区在线观看 | 亚洲精品1区 |