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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

關于數碼管顯示電壓求模和取余問題

[復制鏈接]
跳轉到指定樓層
樓主
在數碼管上如何顯示ADC采樣放大后的值??比如說電壓為0V時數碼管顯示00.00V,電壓2V時數碼管顯示02.00V,電壓10V時數碼管顯示10.00V。
比如:02.00V 怎么取模取余呢????
                        ucTemp8=?;//千位       
                        ucTemp7=?;//百位
                        此處小數點
                        ucTemp6=?;//十位
                        ucTemp5=?;//個位       

                        ucDigShow8=ucTemp8;//數碼管顯示實際內容
                        ucDigShow7=ucTemp7;
                        ucDigShow6=ucTemp6;
                        ucDigShow5=ucTemp5;




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

使用道具 舉報

沙發
ID:1056573 發表于 2023-1-13 20:59 | 只看該作者
unsigne char ucTemp8,ucTemp7,ucTemp6,ucTemp5
unsigne int UC
UC=ucDigShow*100;//ucDigShow是實際數值
ucTemp8=UC/1000;//千位      
ucTemp7=UC%1000/100;//百位
此處小數點
ucTemp6=UC%100/10;//十位
ucTemp5=UC%10;//個位
回復

使用道具 舉報

板凳
ID:213173 發表于 2023-1-13 21:01 | 只看該作者
用整數處理,假設ADC采樣運算后的電壓12.34V,放大100倍得到1234。在數碼管百位加個點不就是12.34。
                unsigned char buf[4];
                b=ch;                               
                for(i=0;i<4;i++)
                {
                        buf[i]=b%10;//由低位到高位保存
                        b/=10;
                }
回復

使用道具 舉報

地板
ID:883242 發表于 2023-1-13 21:58 | 只看該作者
你先舉個栗子,比如02.00V的機器內碼是什么?先知道內碼才能轉換。
回復

使用道具 舉報

5#
ID:232366 發表于 2023-1-14 09:43 | 只看該作者
Hephaestus 發表于 2023-1-13 21:58
你先舉個栗子,比如02.00V的機器內碼是什么?先知道內碼才能轉換。

其實就是一個四位數碼管電壓表的電壓顯示問題,上程序又太大不完整我簡單點些ADC采樣和數碼管顯示緩沖區的代碼截出就容易理解多了來您幫我看看。

uint8 ADC_Read_data_Out_Show;//ADC讀取數據輸出顯示變量"共外部顯示器顯示"
uint32 ulTemp=0;//參與換算的中間變量

unsigned char ucTemp5=0;                          //中間過渡變量
unsigned char ucTemp6=0;                          //中間過渡變量
unsigned char ucTemp7=0;                          //中間過渡變量
unsigned char ucTemp8=0;                          //中間過渡變量

unsigned char ucDigShow8=19;  //第8位數碼管要顯示的內容
unsigned char ucDigShow7=19;  //第7位數碼管要顯示的內容
unsigned char ucDigShow6=19;  //第6位數碼管要顯示的內容
unsigned char ucDigShow5=19;  //第5位數碼管要顯示的內容

void ADC_ALLot()
{               
                unsigned long ulTemp=0;//參與換算的中間變量
                unsigned long ulFilterV=0;//經過濾波后的實時電壓值

                Start_ADC_Read_Data_Drive();//啟動ADC模塊讀取數據驅動 "啟動ADC采樣"
                ulTemp=0;//把char類型數據賦值給long類型數據之前,必須先清零
                ulTemp=ADC_Read_data_Out_Show;               
                ulTemp=(ulTemp*1.0/255*5.0)*1000; //數據處理:進行電壓換算
}

void Nixie_ALLot()//數碼管數據分配函數
{
        static xdata uint16 count=0;
        count++;
        if(count>=250)
        {
                count=0;
                //現在的問題就是這里怎么對"ulTemp"此變量進行顯示可以看到上面是已經,經過電壓轉換并且放大1000倍后的數了。
                //那么比如說"ulTemp"此變量經放大后的電壓數值是三位數比如2V那么改在數碼管顯示緩沖區取模取余怎么顯示出來???
                //并且數碼管是四位的此時保留兩位小數(千位數碼管顯示0百位顯示2(此處加小數點)十位0個位0)(所以上面我才會問怎么顯示出來02.00V)
                //也就是10V以內千位數碼管都是0,10以外千位數碼管正常顯示,同時都是保留兩位小數。
                //該怎么對ulTemp變量進行顯示
                ucTemp8=;//千位       
                ucTemp7=;//百位       
                //此處為小數點(固定)       
                ucTemp6=;//十位
                ucTemp5=;//個位       

                ucDigShow8=ucTemp8;//數碼管顯示實際內容
                ucDigShow7=ucTemp7;
                ucDigShow6=ucTemp6;
                ucDigShow5=ucTemp5;

               Show_Service();//顯示服務函數(請忽略)
        }
        display_drive();//顯示數碼管字模的驅動函數(請忽略)
}

回復

使用道具 舉報

6#
ID:136523 發表于 2023-1-14 10:31 | 只看該作者
    temp=ADC();   采樣值,比如當前2V  采樣輸出值200.                  
                        ucTemp8=temp/1000;//千位      
                        ucTemp7=temp/100%10;//百位
                        此處小數點. 可以處理到第二位數碼管的DP點, 通常自己建立解碼數組處理, 比如ucTemp7+0X80。
                        ucTemp6=temp/10%10;//十位
                        ucTemp5=temp%10;//個位      
回復

使用道具 舉報

7#
ID:232366 發表于 2023-1-14 16:14 | 只看該作者
wulin 發表于 2023-1-13 21:01
用整數處理,假設ADC采樣運算后的電壓12.34V,放大100倍得到1234。在數碼管百位加個點不就是12.34。
                uns ...

我上面的提問不夠詳細這個是比較詳細的具體如下。





其實就是一個四位數碼管電壓表的電壓顯示問題,上程序又太大不完整我簡單點些ADC采樣和數碼管顯示緩沖區的代碼截出就容易理解多了來您幫我看看。

uint8 ADC_Read_data_Out_Show;//ADC讀取數據輸出顯示變量"共外部顯示器顯示"
uint32 ulTemp=0;//參與換算的中間變量

unsigned char ucTemp5=0;                          //中間過渡變量
unsigned char ucTemp6=0;                          //中間過渡變量
unsigned char ucTemp7=0;                          //中間過渡變量
unsigned char ucTemp8=0;                          //中間過渡變量

unsigned char ucDigShow8=19;  //第8位數碼管要顯示的內容
unsigned char ucDigShow7=19;  //第7位數碼管要顯示的內容
unsigned char ucDigShow6=19;  //第6位數碼管要顯示的內容
unsigned char ucDigShow5=19;  //第5位數碼管要顯示的內容

void ADC_ALLot()
{               
                unsigned long ulTemp=0;//參與換算的中間變量
                unsigned long ulFilterV=0;//經過濾波后的實時電壓值

                Start_ADC_Read_Data_Drive();//啟動ADC模塊讀取數據驅動 "啟動ADC采樣"
                ulTemp=0;//把char類型數據賦值給long類型數據之前,必須先清零
                ulTemp=ADC_Read_data_Out_Show;               
                ulTemp=(ulTemp*1.0/255*5.0)*1000; //數據處理:進行電壓換算
}

void Nixie_ALLot()//數碼管數據分配函數
{
        static xdata uint16 count=0;
        count++;
        if(count>=250)
        {
                count=0;
                //現在的問題就是這里怎么對"ulTemp"此變量進行顯示可以看到上面是已經,經過電壓轉換并且放大1000倍后的數了。
                //那么比如說"ulTemp"此變量經放大后的電壓數值是三位數比如2V那么改在數碼管顯示緩沖區取模取余怎么顯示出來???
                //并且數碼管是四位的此時保留兩位小數(千位數碼管顯示0百位顯示2(此處加小數點)十位0個位0)(所以上面我才會問怎么顯示出來02.00V)
                //也就是10V以內千位數碼管都是0,10以外千位數碼管正常顯示,同時都是保留兩位小數。
                //該怎么對ulTemp變量進行顯示
                ucTemp8=;//千位      
                ucTemp7=;//百位      
                //此處為小數點(固定)      
                ucTemp6=;//十位
                ucTemp5=;//個位      

                ucDigShow8=ucTemp8;//數碼管顯示實際內容
                ucDigShow7=ucTemp7;
                ucDigShow6=ucTemp6;
                ucDigShow5=ucTemp5;

               Show_Service();//顯示服務函數(請忽略)
        }
        display_drive();//顯示數碼管字模的驅動函數(請忽略)
}
回復

使用道具 舉報

8#
ID:232366 發表于 2023-1-14 22:20 | 只看該作者
德陽迅諾科技 發表于 2023-1-14 10:31
temp=ADC();   采樣值,比如當前2V  采樣輸出值200.                  
                        ucT ...

感謝給予解答 參考著您的建議,和其他回復我的老師的建議,目前問題已經得以解決。感謝!!!!!!!
回復

使用道具 舉報

9#
ID:213173 發表于 2023-1-14 22:24 | 只看該作者
SHANWAZI 發表于 2023-1-14 16:14
我上面的提問不夠詳細這個是比較詳細的具體如下。

不需要寫的那么繁瑣,給你寫個省略示例參考,你按實際電路修改端口定義。




  1. #include <STC15F2K60S2.H>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. #define VCC_V  5                        //宏定義電源電壓5V
  5. uchar code table[]={//共陰數碼管段碼"0~f-."
  6.                 0x3f,0x06,0x5b,0x4f,
  7.                 0x66,0x6d,0x7d,0x07,
  8.                 0x7f,0x6f,0x77,0x7c,
  9.                 0x39,0x5e,0x79,0x71,0x40,0x80};
  10. uchar data dis_buf[4];                //緩存數組
  11. uint ADC_result;                                //ADC轉換結果
  12. uint ADC_V;
  13. uchar i,j;

  14. void main()
  15. {         
  16.         //初始化略
  17.         while(1)
  18.         {
  19. //                ADC_result=GetADCResult(0);//十位ADC程序略
  20.                 ADC_result=410;//模擬十位ADC結果
  21.                 ADC_V=VCC_V*100*(long)ADC_result/1024;//放大100倍,強制轉換數據類型
  22.                 for(i=4;i>0;i--)
  23.                 {
  24.                         dis_buf[i-1]=ADC_V%10;//由低位到高位分解保存
  25.                         ADC_V/=10;
  26.                 }
  27.                 P0=0x00;//段消隱
  28.                 P2&=0xf0;//清位碼
  29.                 P2|=~(0x01<<j);//送位碼
  30.                 if(j==1)
  31.                         P0=table[dis_buf[j]]|0x80;//送段碼加小數點
  32.                 else P0=table[dis_buf[j]];//送段碼不加點
  33.                 j=++j%4;//循環計數
  34.         }
  35. }
復制代碼



回復

使用道具 舉報

10#
ID:232366 發表于 2023-1-16 20:46 | 只看該作者
wulin 發表于 2023-1-14 22:24
不需要寫的那么繁瑣,給你寫個省略示例參考,你按實際電路修改端口定義。

感謝感謝 參考您的建議和其他幾個老師的例程目前問題以解決并能正常顯示了!!!十分感謝。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品欧美 | caoporn免费在线视频 | 日韩一区二区三区在线观看 | 国产精品高潮呻吟久久av野狼 | 三级视频国产 | 日韩一区在线播放 | 精品久久久久久久人人人人传媒 | 特黄视频 | 欧美精品一区二区免费视频 | 黄色一级特级片 | 国产区在线 | 真人女人一级毛片免费播放 | 特黄一级| 国产真实乱全部视频 | 欧美国产91| 久久久久亚洲精品中文字幕 | 久久久久91 | 亚洲欧美在线一区 | 国产美女自拍视频 | 黄色大片视频 | 精品av天堂毛片久久久借种 | 毛片免费观看 | 国产免费一区 | 国产成人精品免费 | 81精品国产乱码久久久久久 | 亚洲一区视频在线 | 精品产国自在拍 | 99久久久99久久国产片鸭王 | 伊人久久综合 | 日本亚洲欧美 | 人妖av| 国产1区2区在线观看 | 黄色一级网 | 欧美激情在线精品一区二区三区 | 国产精品国产精品国产专区不片 | 在线成人免费视频 | 亚洲男人网 | 成人综合视频在线 | av网站在线播放 | 亚洲国产高清在线 | 亚洲不卡av在线 |