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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

好想有人給我解釋一下這個單片機程序代碼啊,頂不住了

[復制鏈接]
跳轉到指定樓層
樓主
ID:1047868 發表于 2022-10-16 10:21 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int

uchar ms=26,a,qiangda,flag2,xs=5,n=20;
sbit we1 = P2^1;
sbit we2 = P2^2;
sbit we3 = P2^3;
sbit we4 = P2^4;

sbit beep = P3^7;   


sbit zhuchi = P3^6;                  
        
sbit S1 = P1^0;                  
sbit S2 = P1^1;
sbit S3 = P1^2;
sbit S4 = P1^3;
sbit S5 = P1^4;
sbit S6 = P1^5;

sbit Sa = P1^6;         
sbit Sj = P1^7;         
sbit L1=P3^5;
uchar code tab[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};

void delay(uint z);
void display();
void init();
void key();

void main()
{
        init();
        while(1)
        {
                display();
                key();
        }                                            
}
   void timer1() interrupt 3         
{
        TH1 = 0X4b;
        TL1 = 0Xfe;
        a++;
        if(a == 20 && qiangda == 1)                  
        {
                a = 0;
                ms--;
                if(ms == 0 && qiangda == 1)
                {                                
                        ms = 0;
                        TR1 = 0;
                        P0 = 0;
                    beep = 1;
                        qiangda = 0;
                        L1=1;
                        delay(20000);
                        L1=0;
                }
        }
        if(a == 20 && flag2 == 1)
        {
                a = 0;
                ms--;
                if(ms == 0)
                {
                        ms = 0;
                        TR1 = 0;
                        P0 = 0;
            beep = 1;
                        L1=1;
                        delay(20000);
                        L1=0;
                }
        }
}

   void delay(uint z)                  
{
        uchar x,y;
        for(x = z;x > 0;x--)
                for(y = 114;y > 0;y--);
}

   void display()                          
{
        we1 = 0;P0=tab[xs]; delay(1);we1 = 1;           
        we2 = 0;P0=0x40;delay(1);we2 = 1;           
        we3 = 0;P0=tab[ms/10];delay(1);we3 = 1;         
        we4 = 0;P0=tab[ms%10];delay(1);we4 = 1;         
}
   void key()                                          
{
        if(zhuchi == 0)
                {
                        delay(5);
                        if(zhuchi == 0)
                        {
                        TR1 = ~TR1;
                        ms=5;
                        xs=0;
                        qiangda = 1;

                        beep=0;delay(2000);beep=1;
                                   
                        while(!zhuchi);
                        }
                }

        if(Sa == 0)                                          
                {
                        delay(10);
                if(Sa == 0)
                        {
                            beep=0;delay(2000);beep=1;
                            n++;
                            ms=n;
                            if(n==30)
                             {n=4;}
                             display();                                                                                                                           
                            while(!Sa);
                        }
                }
    if(Sj == 0)                                          
                 {
                        delay(10);
                        if(Sj == 0)
                        {
                            beep=0;delay(2000);beep=1;
                            n--;
                            ms=n;
                            if(n==5)
                             {n=31;}
                            display();
                            while(!Sj);
                        }
                }

         if(qiangda == 1)
                {
                        P1=0xff;
                        if(P1 != 0xff)
                        {                                    
                                delay(5);
                                if(P1 != 0xff)
                                {                                
                            switch(P1)
                                           {
                                          
                                          case 0xfe:{TR1=0;xs=1;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                          case 0xfd:{TR1=0;xs=2;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                          case 0xfb:{TR1=0;xs=3;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                          case 0xf7:{TR1=0;xs=4;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                          case 0xef:{TR1=0;xs=5;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                          case 0xdf:{TR1=0;xs=6;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                         }
                                }
                        }
                }        
}                                                   
void init()                              
{  
L1=0;
         a = 0;                                 
ms = 5;                        
        beep = 1;
        TMOD = 0x10;                 
        TH1 = 0X4b;
        TL1 = 0Xfe;
         EA = 1;
        ET1 = 1;
        TR1 = 0;                        
}                        

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

使用道具 舉報

沙發
ID:310441 發表于 2022-10-16 17:19 | 只看該作者
這個代碼晃了一眼,應該是比較簡單的代碼。
有定時器,有“主持”,“搶答”等拼音,功能也很清晰。
建議新手學習不要偷懶,
認真的自己一行一行的加注釋。
回復

使用道具 舉報

板凳
ID:137736 發表于 2022-10-16 17:50 | 只看該作者
一句注釋也沒有,差評
回復

使用道具 舉報

地板
ID:401564 發表于 2022-10-16 18:08 | 只看該作者
這個只是一個簡單的基礎8051
并沒有用到什么復雜的算法,甚至可以說是半點算法都沒有
幾乎沒有難度可言
你覺得太難,那只是你基礎沒有打好而已
回復

使用道具 舉報

5#
ID:491577 發表于 2022-10-17 10:14 | 只看該作者
樓主基礎太差,到處是延時函數,定時器你以為是拿來看的嗎?大于1ms的延時都是用定時器產生的。你的中斷程序都用長延時函數不出錯才怪。估計第一個中斷程序還沒有執行完,第二、三個中斷又到了,永遠都在中斷中。
回復

使用道具 舉報

6#
ID:842100 發表于 2022-10-17 15:01 | 只看該作者
你發的太亂了,幫你整理了一下,讓你看的舒服容易理解,但是程序不能用。
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar ms=26,a,qiangda,flag2,xs=5,n=20;
sbit we1 = P2^1;
sbit we2 = P2^2;
sbit we3 = P2^3;
sbit we4 = P2^4;
sbit beep = P3^7;   
sbit zhuchi = P3^6;                  
sbit S1 = P1^0;                  
sbit S2 = P1^1;
sbit S3 = P1^2;
sbit S4 = P1^3;
sbit S5 = P1^4;
sbit S6 = P1^5;
sbit Sa = P1^6;         
sbit Sj = P1^7;         
sbit L1=P3^5;
uchar code tab[]={ 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};
void delay(uint z);
void display();
void init();
void key();

void main()
{
       void init()                              
      {  
         L1=0;
         a = 0;                                 
         ms = 5;                        
         beep = 1;
         TMOD = 0x10;                 
         TH1 = 0X4b;
         TL1 = 0Xfe;
         EA = 1;
         ET1 = 1;
         TR1 = 0;                        
      }
        while(1)
        {
                void display()                          
               {
                  we1 = 0;P0=tab[xs]; delay(1);we1 = 1;           
                  we2 = 0;P0=0x40;delay(1);we2 = 1;           
                  we3 = 0;P0=tab[ms/10];delay(1);we3 = 1;         
                  we4 = 0;P0=tab[ms%10];delay(1);we4 = 1;         
               }
                void key()                                          
              {
                  if(zhuchi == 0)
                  {
                        delay(5);
                        if(zhuchi == 0)
                        {
                        TR1 = ~TR1;
                        ms=5;
                        xs=0;
                        qiangda = 1;
                        beep=0;delay(2000);beep=1;
                        while(!zhuchi);
                        }
                 }
              if(Sa == 0)                                          
              {
                        delay(10);
                        if(Sa == 0)
                        {
                            beep=0;                            delay(2000);                            beep=1;
                            n++;
                            ms=n;
                            if(n==30)
                             {n=4;}
                             display();                                                                                                                           
                            while(!Sa);
                        }
              }
              if(Sj == 0)                                          
             {
                        delay(10);
                        if(Sj == 0)
                        {
                            beep=0;delay(2000);beep=1;
                            n--;
                            ms=n;
                            if(n==5)
                             {n=31;}
                            display();
                            while(!Sj);
                        }
             }
            if(qiangda == 1)
            {
                        P1=0xff;
                        if(P1 != 0xff)
                        {                                    
                                delay(5);
                                if(P1 != 0xff)
                                {                                
                            switch(P1)
                                           {
                                             case 0xfe:{TR1=0;xs=1;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                             case 0xfd:{TR1=0;xs=2;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                             case 0xfb:{TR1=0;xs=3;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                             case 0xf7:{TR1=0;xs=4;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                             case 0xef:{TR1=0;xs=5;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                             case 0xdf:{TR1=0;xs=6;TR1=1;flag2=1;qiangda = 0;beep = 0;delay(2000);beep = 1;ms = n;};break;
                                         }
                                }
                        }
                }        
}   

        }                                            
}
   void timer1() interrupt 3         
{
        TH1 = 0X4b;
        TL1 = 0Xfe;
        a++;
        if(a == 20 && qiangda == 1)                  
        {
                a = 0;
                ms--;
                if(ms == 0 && qiangda == 1)
                {                                
                        ms = 0;
                        TR1 = 0;
                        P0 = 0;
                        beep = 1;
                        qiangda = 0;
                        L1=1;
                        delay(20000);
                        L1=0;
                }
        }
        if(a == 20 && flag2 == 1)
        {
                a = 0;
                ms--;
                if(ms == 0)
                {
                        ms = 0;
                        TR1 = 0;
                        P0 = 0;
            beep = 1;
                        L1=1;
                        delay(20000);
                        L1=0;
                }
        }
}

   void delay(uint z)                  
{
        uchar x,y;
        for(x = z;x > 0;x--)
        for(y = 114;y > 0;y--)

   void display()                          
{
        we1 = 0;P0=tab[xs]; delay(1);we1 = 1;           
        we2 = 0;P0=0x40;delay(1);we2 = 1;           
        we3 = 0;P0=tab[ms/10];delay(1);we3 = 1;         
        we4 = 0;P0=tab[ms%10];delay(1);we4 = 1;         
}


回復

使用道具 舉報

7#
ID:584814 發表于 2022-10-17 16:21 | 只看該作者
四位數碼管搶答器,主持人1坐席6,大概就是這。
如果連這個也要發帖求助的話,基本上可以繞開單片機這行了。
PS:真想必須有答案又不想自已動腦可上假貨寶上買買買
回復

使用道具 舉報

8#
ID:883242 發表于 2022-10-17 23:16 | 只看該作者
hhh402 發表于 2022-10-17 10:14
樓主基礎太差,到處是延時函數,定時器你以為是拿來看的嗎?大于1ms的延時都是用定時器產生的。你的中斷程 ...

其實main函數初始化完畢后就撒手人寰,所有處理都在中斷里面是很尋常的寫法。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 紧缚调教一区二区三区视频 | 欧美日韩精品一区二区三区四区 | 日韩视频一区二区 | 亚洲国产精品一区二区第一页 | 国产视频在线观看一区二区三区 | 很黄很污的网站 | 女人毛片a毛片久久人人 | 操久久| 久久手机视频 | 亚洲精品第一 | a级在线免费视频 | 国产中文原创 | 欧美日韩久久久 | 亚洲三级av | 精品一区二区三区在线观看 | 欧美在线a| 欧美a免费 | 欧美激情综合 | 91av在线视频观看 | 成人精品一区二区三区 | 久久久久99 | 欧美一区二区三区 | 欧美激情综合色综合啪啪五月 | 一区二区三区视频在线观看 | 国产91久久精品一区二区 | 97精品超碰一区二区三区 | 久久精品视频91 | 色精品| 中文字幕免费在线 | av中文字幕网站 | 黄网在线观看 | 亚洲精品美女视频 | 亚洲欧美aⅴ| 99这里只有精品 | 91社区在线观看高清 | 婷婷综合五月天 | 日本精品免费 | 激情福利视频 | 日韩成人在线网站 | 国产精品久久久久久久午夜片 | 久久99精品久久久久久国产越南 |