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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

各位大師麻煩幫忙看下這個計數器程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:352736 發表于 2024-10-16 18:18 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
各位大師麻煩幫忙看下這個計數器程序,前段時間發了一個仿制本貼一位大師的程序但最大只能計數到999,經過本貼一些大師的指點修改程序使計數器能正常計數0-9999,再次感謝各位大師的指點!另把修改后的程序發出來再麻煩各位大師幫忙看下怎么修改下程序使數碼管顯示消除無效0,數碼管是共陰的,現在一開機顯示4個0,現在想改一下使前面的十,百,千位顯示的無效0消除。
#include <STC15.h>

#define uchar unsigned char
#define uint unsigned int


sbit FMQ=P5^5;//蜂鳴器

sbit K1=P3^2; //按鍵加
sbit K2=P3^3; //按鍵減
sbit K3=P5^4; //復位

bit flag_KEY=0; //按鍵松開標志位

sbit DS1=P3^4;//數碼管第1位
sbit DS2=P3^5;//數碼管第2位
sbit DS3=P3^6;//數碼管第3位
sbit DS4=P3^7;//數碼管第4位

unsigned char ScanTime=1;

unsigned int Num=0;


//共陰數碼管段碼表,段接P1.0-1.6,位接P3.4-3.7
unsigned char code SEG_Tab[]={      
        0x3F,/*0*/
        0x06,/*1*/
        0x5B,/*2*/
        0x4F,/*3*/
        0x66,/*4*/
        0x6D,/*5*/
        0x7D,/*6*/
        0x07,/*7*/
        0x7F,/*8*/
        0x6F,/*9*/
                0x3F,
};

/*---------------------數碼管顯示---------------------------------------*/        
void display()
{        //數碼管初始化
        P1=0x00;//P1=00000000
        P3=0xFF;//P3=11111111

  switch(ScanTime)
        {
          //----------數碼管第1位--------------               
                case 1:
                        if(Num==0)
                        {
                                P1=0x3F;
                        }
                        else
                        {
                                P1=SEG_Tab[Num/1000];
                        }

                                DS1=0;

                break;

          //-----------數碼管第2位-------------               
                case 2:
                        if(Num==0)
                        {
                                P1=0x3F;
                        }
                        else
                        {
                                P1=SEG_Tab[Num/100%10];
                        }                        

                        DS2=0;

                break;

                //-----------數碼管第3位-------------               
                case 3:  
                        if(Num==0)
                        {
                                P1=0x3F;
                        }
                        else
                        {
                                P1=SEG_Tab[Num/10%10];
                        }                        


                          DS3=0;                        
                break;

                //-----------數碼管第4位-------------               
                case 4:  
                        if(Num==0)
                        {
                                P1=0x3F;
                        }
                        else
                        {
                                P1=SEG_Tab[Num%10];
                        }                        

                        DS4=0;               
                break;

         //------------------default---------------        
                default: break;        
        }

        //-----數碼管循環------        
        ScanTime++;
        if(ScanTime>4)
        {
                ScanTime=1;//循環掃描        
        }
}

/*-------------------------------------
                            按鍵掃描
---------------------------------------*/        
void keyscan()
{
        if(K1==0)
        {
                if(flag_KEY==1)//按鍵只響應1次
                {
                        flag_KEY=0;

                      {if(Num==10000)Num=0;}            
                        {
                                Num++;
                        }
                }
        }


        else if(K2==0)
        {
                if(flag_KEY==1)//按鍵只響應1次
                {
                        flag_KEY=0;

                                 {if(Num==0)Num=10000;}
                        {
                                Num--;
                        }
                }
        }


                else if(K3==0)
        {
                if(flag_KEY==1)//按鍵只響應1次
                {
                        flag_KEY=0;


                        {
                                Num=0;
                        }
                }
        }

  else//按鍵松開
  {        
          flag_KEY=1;
  }          
    }








void delay_ms(unsigned int ms)// 延時子程序
{   
  unsigned int a,b;
  for(a=ms;a>0;a--)
  for(b=123;b>0;b--);
}
/*-------------------------------------
                            主函數
---------------------------------------*/        
void main()
{
         P1M1 = 0x00; P1M0 = 0xFF; //P1口推挽模式
         P3M0 |= 0xf0; P3M1 &= ~0xf0; //P3口推挽模式


        while(1)
        {
                display();
                keyscan();
                delay_ms(10);
                                 
        if(Num<=999)
{
if((Num%100/10 == 0)&&(Num%10 == 0))
{FMQ=0;}
else

{FMQ=1;}
}
else
{
if((Num%1000%100/10 == 0)&&(Num%10 == 0))
{FMQ=0;}
else

{FMQ=1;}
}
}
}

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

使用道具 舉報

沙發
ID:1133081 發表于 2024-10-17 06:03 | 只看該作者
先判斷Num大小,再確定是否顯示該位。例如:

        if(Num<1000)不顯示千位
        else 顯示千位

        if(Num<100)不顯示百位
        else 顯示百位

        if(Num<10)不顯示十位
        else 顯示十位

        通常個位常顯示
回復

使用道具 舉報

板凳
ID:161164 發表于 2024-10-17 11:42 | 只看該作者
  1. case 1:
  2.         if(Num<1000)
  3.         ...
  4. case 2:
  5.         if(Num<100)
  6.         ...
  7. case 3:
  8.         if(Num<10)
  9.         ...
復制代碼
回復

使用道具 舉報

地板
ID:352736 發表于 2024-10-17 18:23 來自手機 | 只看該作者
WL0123 發表于 2024-10-17 06:03
先判斷Num大小,再確定是否顯示該位。例如:

        if(Num

謝謝大師指點!
回復

使用道具 舉報

5#
ID:352736 發表于 2024-10-17 18:24 來自手機 | 只看該作者
lkc8210 發表于 2024-10-17 11:42

謝謝大師指點!
回復

使用道具 舉報

6#
ID:352736 發表于 2024-10-18 19:39 來自手機 | 只看該作者
麻煩各位大師再幫我看下這段計數器的蜂鳴器程序,原來的設計是滿100蜂鳴器響2秒作為提示,比如計數滿100時蜂鳴器響2秒101時蜂鳴器關閉,200是響201關閉以此類推反向計數也一樣,這段程序是一個大師給的,但是有一個問題就是計數器一上電個位為0時蜂鳴器一直響,沒有響2秒就停的延時程序麻煩各位大師幫忙看下怎么改if(NUM<=999) { if((NUM%100/10 == 0)&&(NUM%10 == 0)) {FMQ=0;} else {FMQ=1;} } else { if((NUM%1000%100/10 == 0)&&(NUM%10 == 0)) {FMQ=0;} else {FMQ=1;} }
回復

使用道具 舉報

7#
ID:161164 發表于 2024-10-28 11:04 | 只看該作者
wl20020807 發表于 2024-10-18 19:39
麻煩各位大師再幫我看下這段計數器的蜂鳴器程序,原來的設計是滿100蜂鳴器響2秒作為提示,比如計數滿100時 ...
  1. void main()
  2. {
  3.         uchar FMQ_Delay = 0;
  4.         P1M1 = 0x00;
  5.         P1M0 = 0xFF; //P1口推挽模式
  6.         P3M0 |= 0xf0;
  7.         P3M1 &= ~0xf0; //P3口推挽模式

  8.         while(1)
  9.         {
  10.                 display();
  11.                 keyscan();
  12.                 delay_ms(10);

  13.                 if(NUM%100 == 0)
  14.                 {
  15.                         if(FMQ_Delay<200)
  16.                         {
  17.                                 FMQ_Delay++;
  18.                                 FMQ=0;
  19.                         }else{
  20.                                 FMQ=1;
  21.                         }
  22.                 }
  23.                 else
  24.                 {
  25.                         FMQ_Delay=0;
  26.                         FMQ=1;
  27.                 }
  28.         }
  29. }
復制代碼
回復

使用道具 舉報

8#
ID:352736 發表于 2024-11-2 22:51 來自手機 | 只看該作者
lkc8210 發表于 2024-10-28 11:04

感謝大師的耐心指點!
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产伦精品一区二区三区在线 | 欧美久久久久久 | 99pao成人国产永久免费视频 | 欧美日韩精品一区二区三区蜜桃 | 精品少妇一区二区三区在线播放 | 中文字幕一区二区三区四区 | 91毛片在线观看 | 国产精品亚洲精品 | 狠狠干2020 | 日韩在线不卡 | 视频一区二区在线观看 | 免费久久久久久 | 日韩精品一区二区三区中文在线 | 久久精品网 | 久久精品无码一区二区三区 | 中文字幕一级毛片视频 | 国产综合久久 | 91网在线观看 | 国产精品视频一 | 少妇久久久久 | 久久久久久国产精品 | 在线色网| 亚洲精品久久久久久久久久久久久 | 精品中文字幕在线 | 久久激情网 | 在线视频91| 做a网站| 成人国产精品久久 | 高清av电影 | 国外成人在线视频网站 | 二区视频 | 午夜成人免费视频 | 成年人视频免费在线观看 | 99久久国产免费 | 成人午夜精品一区二区三区 | 日韩视频区 | 国产精品亚洲欧美日韩一区在线 | 精品久久久久久亚洲国产800 | 天堂av在线影院 | av中文在线播放 | 亚洲视频在线看 |