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

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

QQ登錄

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

搜索
查看: 4616|回復(fù): 12
打印 上一主題 下一主題
收起左側(cè)

怎樣把數(shù)碼管的小數(shù)點(diǎn)加上去,而且左移移動(dòng)小數(shù)點(diǎn)位,不影響數(shù)碼管正常動(dòng)態(tài)掃描顯示?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:792404 發(fā)表于 2020-8-3 08:57 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
10黑幣
#include"stc8g.h"
#include "intrins.h"
#define key_S 50                               
#define key_L key_S*120               
#define key_I key_S*100       

unsigned char T0RH=0;  //T0重載值的高字節(jié)
unsigned char T0RL=0;  //T0重載值的低字節(jié)
unsigned char i=0;         //數(shù)碼管位緩沖變量
unsigned char j1=0;         //數(shù)碼管位的顯示值
unsigned char j2=0;
unsigned char j3=0;
unsigned char j4=0;

unsigned char x=0;         //按鍵按下次數(shù)
unsigned char x1=0;         //計(jì)數(shù)值變量,定時(shí)器用
unsigned char x2=0;         //標(biāo)志位
unsigned int  x3=0;
unsigned int  x4=0;
unsigned char x5=0;
unsigned int js=0;         //數(shù)碼管顯示的值
unsigned int js1=0;
//unsigned int js2=0;
unsigned char js3=0;

unsigned char code duan[16]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
bit q1=1;
bit q2=1;
//bit q3=1;
bit q4=1;

sbit out=P3^3;        //out 輸出

sbit pa=P1^0;        //a 數(shù)碼管段
sbit pb=P1^1;        //b
sbit pc=P1^2;        //c
sbit pd=P1^3;        //d
sbit pe=P1^4;        //e
sbit pf=P1^5;        //f
sbit pg=P1^6;        //g
sbit ph=P1^7;        //.

sbit p1=P3^4;        //1         數(shù)碼管位
sbit p2=P3^5;        //2
sbit p3=P3^6;        //3
sbit p4=P3^7;        //4

sbit ru=P5^4;
sbit sw1=P5^5;  //按鍵接口
sbit sw2=P3^1;
sbit sw3=P3^0;
sbit sw4=P3^2;  

void s0();
void s1();
void s2();
void s3();
void s4();
void s5();
void s6();
void s7();
void s8();
void s9();
void s10();
void s11();
void s12();
void s13();
void s14();
void s15();
void ssmg();
void xuaze(unsigned char j);
void xianshi1(unsigned int);               
void keyaction();
void cun();

/*掉電存儲(chǔ)*/
void IapIdle();
char IapRead(int addr);
void IapProgram(int addr,char dat);
void IapErase(int addr);
/***************************************/

void delayms(unsigned int k)       
{
        unsigned int i,j;
        for(i=k;i>0;i--)
                for(j=110;j>0;j--);
}
void ConfigTimer0(unsigned int ms)
{
    unsigned long tmp;  //臨時(shí)變量

    tmp=11059200/12;      //定時(shí)器計(jì)數(shù)頻率
    tmp=(tmp*ms)/1000;  //計(jì)算所需的計(jì)數(shù)值
    tmp=65536-tmp;        //計(jì)算定時(shí)器重載值
    tmp=tmp+2;           //補(bǔ)償中斷響應(yīng)延時(shí)造成的誤差
    T0RH=(unsigned char)(tmp>>8);  //定時(shí)器重載值拆分為高低字節(jié)
    T0RL=(unsigned char)tmp;
        TMOD&=0xf0;        //清零T0的控制位
        TMOD|=0x01;        //配置T0為模式1
    TH0=T0RH;     //加載T0重載值
    TL0=T0RL;
    ET0=1;        //使能T0中斷
    TR0=1;        //啟動(dòng)T0
}

void QL()
{
                                 if(js<=1)js=1;
                                 if(js1<=1)js1=1;
                                 if(js3>=33) js3=0;
}

void tm0_isr() interrupt 1 using 1
{
    TH0=T0RH;  //重新加載重載值
    TL0=T0RL;
    ssmg();
    x4++;
       
         switch(js3)
             {                  
                case 0:if(ru==0)out=0;else out=1;break;
                case 1:if(ru==0){out=~out;}break;
                  
               /* case 2:if(x1==0){x1=1;j1=duan[14];j2=duan[14];j3=duan[14];j4=duan[14];QL();}
                       if(x1==1){x1=2;js3=IapRead(3);QL();}
                       if(x1==2){if(x4>=1000){x4=0;js--;if(js==0)
                                        {js=0;x4=0;x1=5;out=0;js=IapRead(1);QL();}}}                                  
                                                        break;
                 
                case 3:if(x1==0){x1=1;j1=duan[14];j2=duan[14];j3=duan[14];j4=duan[14];QL();}
                       if(x1==1){x1=2;js3=IapRead(3);QL();}
                       if(x1==2){if(x4>=1000){x4=0;js--; if(js==0)
                                        {js=0;x4=0;x1=3;out=0;js=IapRead(1);QL();}}}
                   if(x1==3){if(x4>=1000){x4=0;js1--;if(js1==0)
                                        {js1=0;x4=0;x1=0;out=1;js1=IapRead(2);QL();}}}
                                                         break;          */
              }               
}
void keyscan()
{
        static unsigned int time=0;
        if(!sw1||!sw2||!sw3)
        {       
                time++;
                if(time>key_L)//長(zhǎng)按有效
                        time=key_I;//連+/-間隔
                if(time==key_S)//短按消抖
                {
                        if(!sw1){x1++;if(x1>3){x1=0;if(x1==0)cun();}}
                }
                if(time==key_S||time==key_L)//短按消抖或長(zhǎng)按連+/-
                {
                        if(!sw2 && x1!=0){if(x1==1){js3=(js3+1)%33;}
                                          if(x1==2){js=(js+1)%1000;}
                                          if(x1==3){js1=(js1+1)%1000;}}

                        if(!sw3 && x1!=0){if(x1==1){js3--;if(js3==-1)js3=32;}   
                                          if(x1==2){if(js>0){js--;if(js==0)js=1;}}
                                          if(x1==3){if(js1>0){js1--;if(js1==0)js1=1;}}}
                        if((!sw2)&&(!sw3)&&(x1!=0)){js=5;js1=5;js3=0;}                  
                }               
        }
        else time=0;       
}

                 
void cun()
{                                         if(js<=1) js=1;
                                         if(js1<=1) js1=1;
                                         if(js3>=33) js3=0;
       
                                         IapErase(0);
                                         IapProgram(1,js);                                    
                                         IapProgram(2,js1);                                     
                                         IapProgram(3,js3);
                                     
}

void main()
{
        EA=1;
        ConfigTimer0(1);
          
        P1M0=0x00;
        P1M1=0x00;
        P3M0=0xff;
        P3M1=0x00;
        P5M0=0x00;
        P5M1=0x00;

        js=IapRead(1);
        js1=IapRead(2);
        js3=IapRead(3);
        QL();

        while(1)
        {
            keyscan();                        
                if(x1==0){j1=duan[14];j2=duan[14];j3=duan[14];j4=duan[14];}
                if(x1==1){xianshi1(js3);j3=duan[14];j4=duan[15];}
                if(x1==2){xianshi1(js);j4=duan[11];}
                if(x1==3){xianshi1(js1);j4=duan[12];}
            delayms(1);
                                                 
        }                  
}

void IapIdle()
{
   IAP_CONTR=0;
   IAP_CMD=0;
   IAP_TRIG=0;
   IAP_ADDRH=0x80;
   IAP_ADDRL=0;
}

char IapRead(int addr)
{
   char dat;
   IAP_CONTR=0x80;
   IAP_TPS=12;
   IAP_CMD=1;
   IAP_ADDRL=addr;
   IAP_ADDRH=addr>>8;
   IAP_TRIG=0x5a;
   IAP_TRIG=0xa5;
   _nop_();
   dat=IAP_DATA;
   IapIdle();
   return dat;
}

void IapProgram(int addr,char dat)
{
   IAP_CONTR=0x80;
   IAP_TPS=12;
   IAP_CMD=2;
   IAP_ADDRL=addr;
   IAP_ADDRH=addr>>8;
   IAP_DATA=dat;
   IAP_TRIG=0x5a;
   IAP_TRIG=0xa5;
   _nop_();   
   IapIdle();   
}

void IapErase(int addr)
{
   IAP_CONTR=0x80;
   IAP_TPS=12;
   IAP_CMD=3;
   IAP_ADDRL=addr;
   IAP_ADDRH=addr>>8;   
   IAP_TRIG=0x5a;
   IAP_TRIG=0xa5;
   _nop_();   
   IapIdle();      
}

void s0(){pa=0;pb=0;pc=0;pd=0;pe=0;pf=0;pg=1;}
void s1(){pb=0;pc=0;pa=1;pg=1;pd=1;pe=1;pf=1;}
void s2(){pa=0;pb=0;pg=0;pe=0;pd=0;pf=1;pc=1;}
void s3(){pa=0;pb=0;pg=0;pc=0;pd=0;pf=1;pe=1;}
void s4(){pb=0;pg=0;pc=0;pf=0;pa=1;pd=1;pe=1;}
void s5(){pa=0;pg=0;pc=0;pd=0;pf=0;pe=1;pb=1;}
void s6(){pa=0;pg=0;pc=0;pd=0;pf=0;pe=0;pb=1;}
void s7(){pa=0;pb=0;pc=0;pf=1;pe=1;pd=1;pg=1;}
void s8(){pa=0;pb=0;pg=0;pc=0;pd=0;pf=0;pe=0;}
void s9(){pa=0;pb=0;pg=0;pc=0;pd=0;pf=0;pe=1;}
void s10(){pa=1;pb=1;pc=1;pf=1;pe=1;pd=1;pg=1;}
void s11(){pa=1;pb=1;pc=0;pf=0;pe=0;pd=0;pg=0;ph=1;}
void s12(){pa=1;pb=1;pc=1;pf=1;pe=0;pd=0;pg=0;ph=1;}
void s13(){pa=1;pb=1;pc=1;pf=1;pe=1;pd=1;pg=1;ph=0;}
void s14(){pa=1;pb=1;pc=1;pf=1;pe=1;pd=1;pg=0;ph=1;}
void s15(){pa=0;pb=0;pc=1;pf=0;pe=0;pd=1;pg=0;ph=1;}

void xuaze(unsigned char j)
{
        if(j==0){s0();}
        else if(j==1){s1();}
        else if(j==2){s2();}
        else if(j==3){s3();}
        else if(j==4){s4();}
        else if(j==5){s5();}
        else if(j==6){s6();}
        else if(j==7){s7();}
        else if(j==8){s8();}
        else if(j==9){s9();}
        else if(j==10){s10();}
        else if(j==11){s11();}
        else if(j==12){s12();}
        else if(j==13){s13();}
        else if(j==14){s14();}
        else if(j==15){s15();}
}
/*數(shù)碼管顯示函數(shù),調(diào)用在主函數(shù)中*/
void xianshi1(unsigned int sec)
{
        j1=duan[sec%10];
        j2=duan[sec/10%10];
        j3=duan[sec/100%10];                                     
}

/*數(shù)碼管掃描函數(shù),放到中斷中,中斷時(shí)間要是1ms*/
void ssmg()
{
    s10();
    switch(i)
    {
              case 0:p1=1;p2=0;p3=0;p4=0;i++;s10();xuaze(j1);break;
           case 1:p1=0;p2=1;p3=0;p4=0;i++;s10();xuaze(j2);break;
           case 2:p1=0;p2=0;p3=1;p4=0;i++;s10();xuaze(j3);break;
           case 3:p1=0;p2=0;p3=0;p4=1;i=0;s10();xuaze(j4);break;
           default:break;
    }
}

最佳答案

查看完整內(nèi)容

回帖中的附件《數(shù)碼管時(shí)鐘》有處理小數(shù)點(diǎn)在不同位置出現(xiàn)的方法。 http://www.zg4o1577.cn/bbs/dpj-193732-1.html
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:213173 發(fā)表于 2020-8-3 08:57 | 只看該作者
回帖中的附件《數(shù)碼管時(shí)鐘》有處理小數(shù)點(diǎn)在不同位置出現(xiàn)的方法。
http://www.zg4o1577.cn/bbs/dpj-193732-1.html
回復(fù)

使用道具 舉報(bào)

板凳
ID:331263 發(fā)表于 2020-8-3 11:09 | 只看該作者
本帖最后由 dingpeng1980 于 2020-8-3 11:12 編輯

在個(gè)位加個(gè)或運(yùn)算共陰極  P1 = P1 | 0x80    共陽(yáng)極  P1 = P1 & 0x7F
回復(fù)

使用道具 舉報(bào)

地板
ID:331263 發(fā)表于 2020-8-3 11:10 | 只看該作者
在個(gè)位加一個(gè)語(yǔ)句 共陰極  P1 = P1 | 0x80 共陽(yáng)極  P1 = P1 | 0x7F
回復(fù)

使用道具 舉報(bào)

5#
ID:792404 發(fā)表于 2020-8-3 13:36 | 只看該作者
dingpeng1980 發(fā)表于 2020-8-3 11:10
在個(gè)位加一個(gè)語(yǔ)句 共陰極  P1 = P1 | 0x80 共陽(yáng)極  P1 = P1 | 0x7F

試過(guò)了,還是不顯示,正常來(lái)說(shuō)在某一位后面加上&0x7f會(huì)顯示的,但是沒(méi)用的。不知道是哪里出了問(wèn)題
回復(fù)

使用道具 舉報(bào)

6#
ID:807712 發(fā)表于 2020-8-3 13:55 | 只看該作者
小數(shù)點(diǎn)在初始化時(shí)直接加進(jìn)去就好,后面也不會(huì)再動(dòng)得了他,就是一個(gè)固定的顯示
回復(fù)

使用道具 舉報(bào)

7#
ID:792404 發(fā)表于 2020-8-3 14:13 | 只看該作者
這是一個(gè)倒計(jì)時(shí)的程序代碼,還有個(gè)問(wèn)題就是倒計(jì)時(shí)沒(méi)開(kāi)始,先加減鍵設(shè)置好時(shí)間后,程序開(kāi)始運(yùn)行,倒計(jì)時(shí)時(shí)間運(yùn)行過(guò)程中,為什么按加減鍵還會(huì)增加或減小數(shù)字?正常情況下,倒計(jì)時(shí)運(yùn)行過(guò)程中,只有按設(shè)置鍵(就是程序中sw1)才會(huì)使倒計(jì)時(shí)停止并進(jìn)入設(shè)置狀態(tài),其他按鍵不起作用才對(duì)的。請(qǐng)各位大俠指點(diǎn)一下,問(wèn)題出在哪個(gè)地方了。
回復(fù)

使用道具 舉報(bào)

8#
ID:792404 發(fā)表于 2020-8-3 14:19 | 只看該作者
塞北江南 發(fā)表于 2020-8-3 13:55
小數(shù)點(diǎn)在初始化時(shí)直接加進(jìn)去就好,后面也不會(huì)再動(dòng)得了他,就是一個(gè)固定的顯示

我是直接用一個(gè)獨(dú)立按鍵控制4位數(shù)碼管的小數(shù)點(diǎn)循環(huán)點(diǎn)亮,以達(dá)到個(gè)位小數(shù)點(diǎn)亮,以秒倒計(jì)時(shí),十位小數(shù)點(diǎn)亮,以0.1秒倒計(jì)時(shí),百位小數(shù)點(diǎn)亮,以0.01秒倒計(jì)時(shí)的效果,初始化時(shí)直接加進(jìn)去不合適。
回復(fù)

使用道具 舉報(bào)

9#
ID:275826 發(fā)表于 2020-8-3 19:04 | 只看該作者
程序結(jié)構(gòu)不清晰
回復(fù)

使用道具 舉報(bào)

10#
ID:190577 發(fā)表于 2020-8-3 20:27 | 只看該作者
       j1=duan[sec%10];
        j2=duan[sec/10%10];
        j3=duan[sec/100%10];   這個(gè)位置加
回復(fù)

使用道具 舉報(bào)

11#
ID:792404 發(fā)表于 2020-8-3 21:30 | 只看該作者
bbxyliyang 發(fā)表于 2020-8-3 20:27
j1=duan[sec%10];
        j2=duan[sec/10%10];
        j3=duan[sec/100%10];   這個(gè)位置加

        j1=duan[sec%10];
        j2=duan[sec/10%10];
        j3=duan[sec/100%10]&0x7f;  
這樣子加嗎?試過(guò)了,小數(shù)點(diǎn)不顯示。
        j1=duan[sec%10];
        j2=duan[sec/10%10];
        j3=duan[sec/100%10];
       P1=P1&0x7f;
這樣子加,3位都會(huì)顯示小數(shù)點(diǎn),但是不符合我的設(shè)計(jì)要求,我要求用一個(gè)獨(dú)立按鍵控制3位數(shù)碼管的小數(shù)點(diǎn)循環(huán)點(diǎn)亮,以達(dá)到個(gè)位小數(shù)點(diǎn)亮,以秒倒計(jì)時(shí),十位小數(shù)點(diǎn)亮,以0.1秒倒計(jì)時(shí),百位小數(shù)點(diǎn)亮,以0.01秒倒計(jì)時(shí)的效果
回復(fù)

使用道具 舉報(bào)

12#
ID:462827 發(fā)表于 2020-8-4 00:44 | 只看該作者
你要哪個(gè)位置的數(shù)加就小數(shù)就只改它的段碼就行,如果是共陰的|0x80就加上小數(shù)點(diǎn)了,共陽(yáng)的&0x7f就可以。
回復(fù)

使用道具 舉報(bào)

13#
ID:792404 發(fā)表于 2020-8-4 07:05 | 只看該作者
wulin 發(fā)表于 2020-8-3 08:57
回帖中的附件《數(shù)碼管時(shí)鐘》有處理小數(shù)點(diǎn)在不同位置出現(xiàn)的方法。
http://www.zg4o1577.cn/bbs/dpj-193732-1. ...

這個(gè)方法可以,現(xiàn)在正常了,謝謝師傅
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 精品亚洲国产成av人片传媒 | 欧美日韩在线视频一区 | 五月天天丁香婷婷在线中 | 国产精品久久久久久久久久久久久久 | 黄色成人在线观看 | 国产一区二区三区久久久久久久久 | 尤物在线精品视频 | 成人在线视频观看 | 国产成人精品一区二区三区视频 | 国产精品久久久久久久久久久免费看 | 久久久精 | 国产高清毛片 | 亚洲国产高清在线观看 | 国产免费一区二区三区最新6 | 国产精品中文字幕在线播放 | 国产一区二区免费在线 | 蜜桃视频在线观看免费视频网站www | 农村真人裸体丰满少妇毛片 | 国产高清在线视频 | 国产一区二区 | 亚洲国产精品成人 | 国内精品成人 | 久久看精品 | 日韩精品免费 | 羞羞色视频 | av一级毛片 | 好婷婷网| 欧美一区永久视频免费观看 | 亚洲视频一区在线观看 | 久久一区二区三区电影 | 欧美a区 | 久久国产亚洲 | 草久在线 | 日韩免费毛片视频 | 久久人人爽人人爽 | 成人av一区 | 91欧美精品成人综合在线观看 | 日日操夜夜操视频 | 男女羞羞视频网站 | 中文字幕一区二区三 | 91日日 |