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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

單片機倒計時代碼哪里錯誤?

[復制鏈接]
跳轉到指定樓層
樓主
ID:72649 發表于 2023-8-29 23:48 來自觸屏版 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
/*
功能:第一步、上電后,停止燈熄滅,數碼管顯示1.00,進入待機模式。
      第二步、短按啟動健,xiaodu高電平,運行燈亮,數碼管顯示每秒減一,倒計時開始,直至倒計時結束,spk高,運行燈和數碼管全部熄滅。
                        如果繼續短按啟動鍵,倒計時時間的百位加一,最高到九,即十分鐘,按照預置時間倒計時運行。
                        如果長按啟動鍵3秒關機。也就是啟動健有三種功能,一,啟動,二,預置時間,三,長按關機。
                        第三步、倒計時時間到,顯示和運行燈熄滅,停止燈點亮,spk高電平,經過八秒后,進入待機狀態,顯示點亮顯示1.00,等待下次啟動。
                        第四步、長按key關機,xiaodu低電平,顯示和運行燈熄滅
            短按蜂鳴器響一下
*/

#include"STC15.H"
#include"intrins.H"
#define uint unsigned int
#define uchar unsigned char

#define shi  P30   //1111  1110  0xfe
#define  ge P31    //1111  1101  0xfd
#define key  P32
#define sp  P33
#define xiaodu  P34
#define power  P35
#define bai  P36    //1011  1111   0fbf
#define fmq  P37

//#define a P17
//#define b P16
//#define c P15
//#define d P14
//#define e P13
//#define f P12
//#define g P11
#define h P10

//定義需要顯示的數字
uchar code dis[]={0xfc,0x60,0xda,0x8f,0xcc,0xed,0xfd,0x07,0xff,0xef};
//void key();

//延時函數
void delay(uint n)
{
  uint i,j;
  for(i=n;i>0;i--)
    for(j=110;j>0;j--);
}

void Delay10us()                //@11.0592MHz
{
        unsigned char i;

        _nop_();
        i = 25;
        while (--i);
}


//數碼管顯示函數
void display(uchar n)
{
  P1=dis[n%10];   //個位數
  P3=0xfe;        //COM1顯示
  delay(1);

  P1=dis[n/10];   //十位數
  P3=0xfd;        //COM2顯示
  delay(1);
       
//        P1=dis[n/100%10];   //百位數
//  P3=0xbf;        //COM3顯示
//  delay(1);
}

void baiwie_display(uchar n)
{
        P1=dis[n];   //百位數
  P3=0xbf;        //COM3顯示
  delay(1);
}

//倒計時函數
void countdown()
{
  uchar i;
  for(i=60;i>0;i--)
  {  xiaodu=1;
    display(i);   //顯示剩余時間
    delay(1000);  //延時1秒
                if(i=60);
                 P3=0xff;
  }
}

//按鍵函數
void anjian()
{
        uchar i;
if(!key)
        Delay10us();
if(!key)
{
        countdown();
for(i=9;i>0;i++)
         baiwie_display(i);
  }
else if (!key)
        Delay10us();
if(!key)
{
        delay(1000); delay(1000);delay(1000); //延時3秒
        power=0;
}
}

//主函數
void main()
{
       
  anjian();
  while(1);
}

Screenshot_2023_0829_234654.png (97.42 KB, 下載次數: 43)

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

使用道具 舉報

沙發
ID:170318 發表于 2023-8-30 08:59 | 只看該作者
主程序里錯了
回復

使用道具 舉報

板凳
ID:170318 發表于 2023-8-30 08:59 | 只看該作者
主函數錯了
回復

使用道具 舉報

地板
ID:94031 發表于 2023-8-30 09:38 | 只看該作者
if(i=60); 不能有分號,判斷要用==。
回復

使用道具 舉報

5#
ID:1092275 發表于 2023-8-30 15:37 | 只看該作者
主函數錯了
回復

使用道具 舉報

6#
ID:72649 發表于 2023-8-30 20:41 來自觸屏版 | 只看該作者
xuyaqi 發表于 2023-8-30 09:38
if(i=60); 不能有分號,判斷要用==。

按鍵功能對不對?
回復

使用道具 舉報

7#
ID:72649 發表于 2023-8-30 20:42 來自觸屏版 | 只看該作者
sj820224 發表于 2023-8-30 15:37
主函數錯了

能不能實現功能
回復

使用道具 舉報

8#
ID:72649 發表于 2023-8-31 02:45 來自觸屏版 | 只看該作者
jhczy 發表于 2023-8-30 08:59
主函數錯了

能不能指導一下,具體點。
回復

使用道具 舉報

9#
ID:526543 發表于 2023-8-31 08:45 | 只看該作者
#include "STC15.H"
#include "intrins.H"

#define uint unsigned int
#define uchar unsigned char

sbit shi = P3^0;
sbit ge = P3^1;
sbit key = P3^2;
sbit sp = P3^3;
sbit xiaodu = P3^4;
sbit power = P3^5;
sbit bai = P3^6;
sbit fmq = P3^7;

uchar code dis[] = {0xFC, 0x60, 0xDA, 0x8F, 0xCC, 0xED, 0xFD, 0x07, 0xFF, 0xEF};

void delay(uint n) {
    uint i, j;
    for (i = n; i > 0; i--)
        for (j = 110; j > 0; j--);
}

void Delay10us() {
    unsigned char i;
    _nop_();
    i = 25;
    while (--i);
}

void display(uchar n) {
    shi = 1;
    ge = 0;
    P1 = dis[n % 10];
    delay(1);

    shi = 0;
    ge = 1;
    P1 = dis[n / 10];
    delay(1);
}

void countdown() {
    uchar i;
    for (i = 60; i > 0; i--) {
        xiaodu = 1;
        display(i);
        delay(1000);
        if (i == 60) {
            P1 = 0xFF;  // Clear the display if i is 60
        }
    }
}

void main() {
    uchar timeSetting = 1;  // Initialize time setting to 1 minute

    while (1) {
        // Check if the key is pressed
        if (!key) {
            Delay10us();
            if (!key) {
                countdown();  // Start countdown
                fmq = 0;  // Short beep
            }
        }
        // Check if the power button is pressed
        if (!power) {
            delay(100);  // Debounce
            if (!power) {
                xiaodu = 0;
                fmq = 1;  // Long beep
                delay(3000);  // Delay for 3 seconds
                power = 0;  // Turn off power
            }
        }
        // Check if the key is held for 3 seconds
        if (!key) {
            Delay10us();
            if (!key) {
                Delay10us();
                if (!key) {
                    delay(3000);  // Wait for 3 seconds
                    power = 0;    // Turn off power
                }
            }
        }
    }
}
回復

使用道具 舉報

10#
ID:275826 發表于 2023-8-31 17:37 | 只看該作者
#include<reg51.h>
#include<intrins.h>
#define u8 unsigned char
#define u16 unsigned int

u8 code ledcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
u8 cnt_1ms,smg_bit,keynum;
u8 tmp_old=0xf0,tmp_new;
u16 cnt_10ms,beep_time,keypush_time,cnt_s;
bit flag_1ms,flag_10ms,flagpush,flag_beep,flag_run,flag_stop,flag_down;
sbit beep=P3^7;
sbit key=P3^6;
sbit led_run=P3^0;
sbit led_stop=P3^1;
u8 t_bai,t_shi,t_ge,keycnt;
int time,s_time;
/********************************************************************/
void init(void)
  {TMOD=0x01;
   TH0=(65536-500)/256;
   TL0=(65536-500)%256;
   EA=ET0=TR0=1;
   P2=0xff;
  }
/********************************************************************/
void display(void)
   {
    P2=P2|0x0f;
        if(!flag_down)
                {switch(smg_bit)
                  {case 0: P0=ledcode[t_ge];P2=P2&0xfe;break;
                   case 1: P0=ledcode[t_shi];P2=P2&0xfd;break;;
                   case 2: P0=ledcode[t_bai];P2=P2&0xfb;break;
                   case 3: P0=0x0;P2=P2&0xf7;break;
                  }
                }
        else
           {switch(smg_bit)
                  {case 0: P0=0x00;P2=P2|0x0f;break;
                   case 1: P0=0x00;P2=P2|0x0f;break;;
                   case 2: P0=0x00;P2=P2|0x0f;break;
                   case 3: P0=0x00;P2=P2|0x0f;break;
                  }
                }
   }

/********************************************************************/
u8 keyscan(void)
   { u8 temp_keynum=0;
     tmp_new=key;
         if(((tmp_new&0x01)==0)&&((tmp_old&0x01)==1))  {flagpush=1;}
         if(flagpush)keypush_time++;
         if(key)
            {if((keypush_time>1)&&(keypush_time<100))
                    {temp_keynum=1;flag_beep=1;}
                 else if (keypush_time>=300)
                    {temp_keynum=2;flag_beep=1;}
                 if (keypush_time==0) temp_keynum=0;
                 keypush_time=0;
                 flagpush=0;
                }  
         tmp_old=tmp_new;
    return temp_keynum;
   }
/********************************************************************/
void keyfunction(u8 kf)
   {
     switch(kf)
           {
             case 1: if(keycnt==1) {t_bai++;if(t_bai>9){keycnt=0; t_bai=9;}
                                                time=100*t_bai+10*t_shi+t_ge;
                                                }
                                 else {flag_run=1;keycnt=1;flag_down=0;flag_stop=0;time=100;}
                         break;
                 case 2: {flag_down=1;keycnt=0;flag_run=0;} break;
           }
   }

/********************************************************************/
void main(void)
  {
   init();
   t_bai=0;
   time=100;
   while(1)
     {
          led_run=!flag_run;
          led_stop=!flag_stop;
          if(flag_1ms)
            {
                  flag_1ms=0;
                 
                 t_ge=time%10;
                 t_shi=time/10%10;
                 t_bai=time/100;
                 display();
                 smg_bit=++smg_bit%4;
                }
          if(flag_10ms)
             {
                  flag_10ms=0;
                  keynum=keyscan();
                  keyfunction(keynum);
                  if(flag_stop)
                    {
                         s_time++;
                         if(s_time>799)
                            {
                                 time=100;
                                 keycnt=0;
                                 flag_down=0;
                                }
                        }
             }
           }

  }
/********************************************************************/
void tt0(void) interrupt 1        using 1
  {
   TH0=(65536-500)/256;
   TL0=(65536-500)%256;
   if(flag_beep)
     {beep_time++;
          beep=!beep;
          if(beep_time>300)
             {
                  beep_time=0;
                  flag_beep=0;
                  beep=1;
                 }
         }
   
   cnt_1ms++;
   if(cnt_1ms>1)
      {flag_1ms=1; cnt_10ms++;cnt_1ms=0;
       if(cnt_10ms>9)
         {flag_10ms=1;
                  if(flag_run)cnt_s++;
              cnt_10ms=0;
                     if(cnt_s>99)
                    {cnt_s=0;
                         time=time-1;
                         if(time<=0){time=0;flag_stop=1;flag_run=0;flag_down=1;keycnt=0;}
                        }
             }
      }
  }
/********************************************************************/

改下腳位可以用
回復

使用道具 舉報

11#
ID:1040201 發表于 2023-9-1 21:07 | 只看該作者
初始化  和數碼管你都 沒有用調用。
回復

使用道具 舉報

12#
ID:72649 發表于 2023-9-1 22:24 來自觸屏版 | 只看該作者
tyrl800 發表于 2023-8-31 17:37
#include
#include
#define u8 unsigned char

如果把倒計時最大時間可以設置到9.60,即十分鐘,代碼怎么修改?
回復

使用道具 舉報

13#
ID:275826 發表于 2023-9-2 07:55 | 只看該作者
現在程序可以設置到900,加個修改十位的代碼可以設置960
回復

使用道具 舉報

14#
ID:213173 發表于 2023-9-5 16:36 | 只看該作者
hjx5548 發表于 2023-9-1 22:24
如果把倒計時最大時間可以設置到9.60,即十分鐘,代碼怎么修改?

從你寫的代碼看,你目前還不具備寫一個單健控制倒計時的項目。依照你的硬件圖給你重新組織改寫了一個單健控制倒計時程序的構架。加電即開機。短按功能:開機、啟動倒計時、設置狀態循環加分0~9、十位秒循環加0~5、個位秒循環加0~9。長按1:設置分閃爍,長按2:設置十位秒閃爍,長按3:設置個位秒閃爍,長按4:恢復待機。設置過程超過5秒不按健自動恢復待機。長按超過5秒不松手關機。有詳細注釋,仔細看慢慢能理解。蜂鳴器、消毒燈,指示燈功能很簡單你自己加進去。 單健倒計時.rar (17.2 KB, 下載次數: 7)


回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 狠狠躁躁夜夜躁波多野结依 | 精品无码久久久久久久动漫 | 波多野吉衣在线播放 | 日韩精品一区二区三区在线观看 | 日本一区二区影视 | 超碰伊人久久 | 日韩欧美手机在线 | 国产欧美一区二区三区国产幕精品 | 黄色欧美在线 | 伊人久久麻豆 | 91精品久久久久久久 | 久久精品中文字幕 | 亚洲综合色 | 日本久草视频 | 成人不卡在线 | 欧美 日韩 国产 成人 在线 | 久久精品国产99国产精品亚洲 | 国产精品久久国产精品99 | 黄色在线免费观看视频网站 | 精品毛片在线观看 | 精品国产精品三级精品av网址 | 国产精品自产av一区二区三区 | 久热久热 | 亚洲国产精品99久久久久久久久 | 免费在线观看h片 | 久久精品在线免费视频 | 精品久久久久久亚洲精品 | 岛国二区 | 亚洲国产欧美在线 | 中国xxxx性xxxx产国 | 二区在线视频 | 欧美激情欧美激情在线五月 | 久久草在线视频 | 日韩av免费看| 国产一区二区小视频 | 亚洲一区二区三区四区五区中文 | 亚洲精品在 | 美日韩中文字幕 | 久久久夜色精品亚洲 | 日本一区二区三区在线观看 | 亚洲精品一区二区在线观看 |