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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1977|回復(fù): 7
收起左側(cè)

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

[復(fù)制鏈接]
ID:1047868 發(fā)表于 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;                        
}                        

回復(fù)

使用道具 舉報

ID:310441 發(fā)表于 2022-10-16 17:19 | 顯示全部樓層
這個代碼晃了一眼,應(yīng)該是比較簡單的代碼。
有定時器,有“主持”,“搶答”等拼音,功能也很清晰。
建議新手學(xué)習(xí)不要偷懶,
認(rèn)真的自己一行一行的加注釋。
回復(fù)

使用道具 舉報

ID:137736 發(fā)表于 2022-10-16 17:50 | 顯示全部樓層
一句注釋也沒有,差評
回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2022-10-16 18:08 | 顯示全部樓層
這個只是一個簡單的基礎(chǔ)8051
并沒有用到什么復(fù)雜的算法,甚至可以說是半點(diǎn)算法都沒有
幾乎沒有難度可言
你覺得太難,那只是你基礎(chǔ)沒有打好而已
回復(fù)

使用道具 舉報

ID:491577 發(fā)表于 2022-10-17 10:14 | 顯示全部樓層
樓主基礎(chǔ)太差,到處是延時函數(shù),定時器你以為是拿來看的嗎?大于1ms的延時都是用定時器產(chǎn)生的。你的中斷程序都用長延時函數(shù)不出錯才怪。估計第一個中斷程序還沒有執(zhí)行完,第二、三個中斷又到了,永遠(yuǎn)都在中斷中。
回復(fù)

使用道具 舉報

ID:842100 發(fā)表于 2022-10-17 15:01 | 顯示全部樓層
你發(fā)的太亂了,幫你整理了一下,讓你看的舒服容易理解,但是程序不能用。
#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;         
}


回復(fù)

使用道具 舉報

ID:584814 發(fā)表于 2022-10-17 16:21 | 顯示全部樓層
四位數(shù)碼管搶答器,主持人1坐席6,大概就是這。
如果連這個也要發(fā)帖求助的話,基本上可以繞開單片機(jī)這行了。
PS:真想必須有答案又不想自已動腦可上假貨寶上買買買
回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2022-10-17 23:16 | 顯示全部樓層
hhh402 發(fā)表于 2022-10-17 10:14
樓主基礎(chǔ)太差,到處是延時函數(shù),定時器你以為是拿來看的嗎?大于1ms的延時都是用定時器產(chǎn)生的。你的中斷程 ...

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

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲欧美在线观看视频 | 久久之精品 | 国产高清在线视频 | 日韩精品中文字幕一区二区三区 | 亚洲视频免费在线 | 亚洲一级淫片 | a国产一区二区免费入口 | 欧美一区二区三区久久精品 | 亚洲国产一区二区三区 | 免费三级网站 | 91天堂网| 色网站在线 | 一区二区三区四区在线视频 | 免费观看一区二区三区毛片 | 久久人人网 | 国产综合精品一区二区三区 | 亚洲 欧美 另类 综合 偷拍 | 男人的天堂久久 | 久久久久国产一区二区三区四区 | 国产做爰 | 激情欧美一区二区三区中文字幕 | 欧美一区二区三区在线免费观看 | 欧美一区二区在线播放 | 99精品国产一区二区三区 | 国产成人精品一区二区三区 | 午夜成人在线视频 | 国内自拍视频在线观看 | 欧美日韩精品一区二区三区四区 | 黄色毛片在线看 | 久久久美女 | 男人的天堂久久 | 久久综合久久自在自线精品自 | 亚洲激情一区二区三区 | 亚洲一区二区网站 | 中文一区二区 | 黄色毛片黄色毛片 | 欧美黄 片免费观看 | 日本精品久久久久 | 日韩一区二区三区在线 | 欧美激情精品久久久久久变态 | 久草欧美|