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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

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

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:792404 發(fā)表于 2020-8-3 08:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
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;         //計數(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();

/*掉電存儲*/
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;  //臨時變量

    tmp=11059200/12;      //定時器計數(shù)頻率
    tmp=(tmp*ms)/1000;  //計算所需的計數(shù)值
    tmp=65536-tmp;        //計算定時器重載值
    tmp=tmp+2;           //補(bǔ)償中斷響應(yīng)延時造成的誤差
    T0RH=(unsigned char)(tmp>>8);  //定時器重載值拆分為高低字節(jié)
    T0RL=(unsigned char)tmp;
        TMOD&=0xf0;        //清零T0的控制位
        TMOD|=0x01;        //配置T0為模式1
    TH0=T0RH;     //加載T0重載值
    TL0=T0RL;
    ET0=1;        //使能T0中斷
    TR0=1;        //啟動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)//長按有效
                        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)//短按消抖或長按連+/-
                {
                        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ù),放到中斷中,中斷時間要是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ù)點在不同位置出現(xiàn)的方法。 http://www.zg4o1577.cn/bbs/dpj-193732-1.html
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

試過了,還是不顯示,正常來說在某一位后面加上&0x7f會顯示的,但是沒用的。不知道是哪里出了問題
回復(fù)

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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];   這個位置加

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日日夜夜免费精品视频 | 精品视频在线一区 | 九九亚洲 | 亚洲精品一 | 在线日韩欧美 | 日韩成人免费视频 | 7777在线视频 | 中国黄色毛片视频 | 亚洲综合国产 | 日韩精品在线观看视频 | 蜜臀91视频 | 精品久久久久久久久久久久久久 | 日韩欧美在线一区 | 一本色道精品久久一区二区三区 | 日日夜夜精品视频 | 自拍偷拍一区二区三区 | 国产精品久久久久久亚洲调教 | 亚洲日日夜夜 | 国产乱码精品1区2区3区 | 91大神xh98xh系列全部 | 久久性色 | 欧美h版| 成人国产精品免费观看视频 | 色综合欧美 | 精品产国自在拍 | 国产69久久精品成人看动漫 | 欧美一区二区三区一在线观看 | 久久亚洲欧美日韩精品专区 | 97成人精品 | 日韩av成人| 欧美性受xxxx白人性爽 | 精品在线观看一区二区 | 国产欧美精品 | 欧美亚洲国产成人 | 久久久久久国产精品免费免费狐狸 | 看av电影| 蜜臀av日日欢夜夜爽一区 | 又黑又粗又长的欧美一区 | 亚洲色图综合 | 精产嫩模国品一二三区 | 日韩爱爱网站 |