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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:232366 發(fā)表于 2023-1-13 17:53 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
在數(shù)碼管上如何顯示ADC采樣放大后的值??比如說電壓為0V時數(shù)碼管顯示00.00V,電壓2V時數(shù)碼管顯示02.00V,電壓10V時數(shù)碼管顯示10.00V。
比如:02.00V 怎么取模取余呢????
                        ucTemp8=?;//千位       
                        ucTemp7=?;//百位
                        此處小數(shù)點
                        ucTemp6=?;//十位
                        ucTemp5=?;//個位       

                        ucDigShow8=ucTemp8;//數(shù)碼管顯示實際內(nèi)容
                        ucDigShow7=ucTemp7;
                        ucDigShow6=ucTemp6;
                        ucDigShow5=ucTemp5;




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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

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

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

unsigned char ucDigShow8=19;  //第8位數(shù)碼管要顯示的內(nèi)容
unsigned char ucDigShow7=19;  //第7位數(shù)碼管要顯示的內(nèi)容
unsigned char ucDigShow6=19;  //第6位數(shù)碼管要顯示的內(nèi)容
unsigned char ucDigShow5=19;  //第5位數(shù)碼管要顯示的內(nèi)容

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

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

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

                ucDigShow8=ucTemp8;//數(shù)碼管顯示實際內(nèi)容
                ucDigShow7=ucTemp7;
                ucDigShow6=ucTemp6;
                ucDigShow5=ucTemp5;

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

回復

使用道具 舉報

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

使用道具 舉報

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

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





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

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

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

unsigned char ucDigShow8=19;  //第8位數(shù)碼管要顯示的內(nèi)容
unsigned char ucDigShow7=19;  //第7位數(shù)碼管要顯示的內(nèi)容
unsigned char ucDigShow6=19;  //第6位數(shù)碼管要顯示的內(nèi)容
unsigned char ucDigShow5=19;  //第5位數(shù)碼管要顯示的內(nèi)容

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

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

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

                ucDigShow8=ucTemp8;//數(shù)碼管顯示實際內(nèi)容
                ucDigShow7=ucTemp7;
                ucDigShow6=ucTemp6;
                ucDigShow5=ucTemp5;

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

使用道具 舉報

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

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

使用道具 舉報

9#
ID:213173 發(fā)表于 2023-1-14 22:24 | 只看該作者
SHANWAZI 發(fā)表于 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[]={//共陰數(shù)碼管段碼"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];                //緩存數(shù)組
  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倍,強制轉換數(shù)據(jù)類型
  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;//送段碼加小數(shù)點
  32.                 else P0=table[dis_buf[j]];//送段碼不加點
  33.                 j=++j%4;//循環(huán)計數(shù)
  34.         }
  35. }
復制代碼



回復

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: www.xxxx欧美 | 四虎免费视频 | 日韩成人在线免费视频 | 欧美日韩一区精品 | 欧美日韩国产三级 | 午夜精品久久久久久久久久久久 | 天天夜夜操 | 亚洲一区免费视频 | 欧美一级黄色免费看 | v片网站 | 国产成人精品a视频一区www | 亚洲精品一区二区 | 精品国产一区久久 | 国产精品久久久久av | 一区二区国产精品 | 99爱在线观看 | 欧美久久精品一级c片 | 午夜视频在线观看网址 | 成人欧美一区二区三区视频xxx | av手机免费在线观看 | 国产精品一区久久久 | 中国美女一级黄色片 | 久久久久久国产 | 久久精品16 | 精品视频在线免费观看 | 亚洲精品久久久久中文字幕二区 | 国产 日韩 欧美 制服 另类 | 欧美在线看片 | h视频在线免费看 | 天天综合久久 | 亚洲精品久久久久久一区二区 | 91免费在线| 成人免费一级视频 | 久久成人精品视频 | 欧美久久久久 | 三区在线观看 | 不卡一二区 | 久久精品亚洲精品国产欧美kt∨ | 喷潮网站 | 黄视频免费| 国产精品99久久久久久人 |