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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

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

又來麻煩大家啦,按鍵切換兩個(gè)程序,始終沒整成功,求大佬們指點(diǎn),謝謝

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1105755 發(fā)表于 2024-6-26 23:00 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
又來麻煩大家啦,按鍵切換兩個(gè)程序,始終沒整成功,求大佬們指點(diǎn),謝謝!
用兩個(gè)按鍵切換disp0和disp1,兩個(gè)程序都可獨(dú)立運(yùn)行,加上按鍵切換就是切換不了,請(qǐng)大佬指點(diǎn)!本人也是剛學(xué),繞不明白啦。感謝

單片機(jī)源程序如下:
  1. #include <STC8h.H>
  2. #include <stdlib.h>                        //庫文件,使用隨機(jī)數(shù)發(fā)生函數(shù)

  3. typedef unsigned char uchar; //無符號(hào)字符型數(shù)據(jù)
  4. typedef unsigned int  uint;         //無符號(hào)整型數(shù)據(jù)


  5. sbit Key1=P1^6;        //按鍵開始
  6. sbit Key2=P1^7;        //按鍵停止

  7. bit flag=0;                //定時(shí)時(shí)間標(biāo)志位
  8. uchar num[6];        //產(chǎn)生的隨機(jī)數(shù)
  9. uchar num1[1];
  10. uchar num2[7];        //產(chǎn)生的隨機(jī)數(shù)
  11. uchar num3[2];
  12. uchar cnt;                //計(jì)數(shù)變量
  13. uchar str[5]= {0xff,0xff,0xff,0xff,0xff};         //定義數(shù)組存放35個(gè)LED數(shù)據(jù)
  14. uchar str1[2]= {0xff,0xff};                                        //定義數(shù)組存放12個(gè)LED數(shù)據(jù)

  15. void Delay_Us(int i);                //延時(shí)函數(shù)
  16. void Timer_Init(void);                //定時(shí)器初始化
  17. void UART_Init(void);                //串口初始化
  18. void UART_Send(uchar dat);        //串口發(fā)送數(shù)據(jù)
  19. //主函數(shù)
  20. void disp0()
  21. {
  22.     uchar i,j,k;                        //定義變量
  23.     UART_Init();                           //串口初始化
  24.     Timer_Init();                           //定時(shí)器初始化

  25.     P7M0=0X00;P7M1=0X00;//設(shè)置P0口為準(zhǔn)雙向口狀態(tài),弱上位
  26.            P2M0=0X00;P2M1=0X00;
  27.            P4M0=0X00;P4M1=0X00;
  28.            P0M0=0X00;P0M1=0X00;
  29.     P1M0=0X00;P1M1=0X00;
  30.         P3M0=0X00;P3M1=0X00;
  31.     P6M0=0X00;P6M1=0X00;

  32.     {   //35個(gè)LED初始狀態(tài),全部熄滅
  33.         UART_Send(str[i]);
  34.     }


  35.     P0=0xff;                          //12個(gè)LED初始狀態(tài),全部熄滅
  36.     P1=0xff;
  37.         P2=0xff;                          //12個(gè)LED初始狀態(tài),全部熄滅
  38.     P3=0xff;
  39.         P4=0xff;                          //12個(gè)LED初始狀態(tài),全部熄滅
  40.     P6=0xff;
  41.         P7=0xff;



  42.     while(1)
  43.     {
  44.         if(flag)         //定時(shí)時(shí)間到
  45.         {
  46.             flag=0;         //標(biāo)志位清零
  47.             /*----33抽取6個(gè)LED-----*/
  48.             for(i=0; i<5; i++)         //所有燈熄滅
  49.             {
  50.                 str[i]=0xff;
  51.             }
  52.             for(i=0; i<6; i++)
  53.             {
  54.                 k=rand()%33; //產(chǎn)生隨機(jī)數(shù)0-32
  55.                 for(j=0; j<i ; j++)
  56.                 {
  57.                     while(num[j]==k)         //如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  58.                     {
  59.                         k=rand()%33;
  60.                     }
  61.                 }
  62.                 num[i]=k;
  63.                 str[num[i]/8]&=~(0x01<<(num[i]%8));         //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  64.             }
  65.              P2=str[0];                          //控制35個(gè)LED點(diǎn)亮
  66.              P0=str[1];
  67.                          P7=str[2];                          //控制35個(gè)LED點(diǎn)亮
  68.              P6=str[3];
  69.                          P1=str[4];
  70.             {
  71.                 UART_Send(str[i]);
  72.             }



  73.             /*----16抽取1個(gè)LED-----*/
  74.             str1[0]=0xff;                          //12個(gè)LED全部熄滅
  75.             str1[1]=0xff;
  76.             for(i=0; i<1; i++)
  77.             {
  78.                 k=rand()%16; //產(chǎn)生隨機(jī)數(shù)0-15
  79.                 for(j=0; j<i ; j++)
  80.                 {
  81.                     while(num1[j]==k)         //如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  82.                     {
  83.                         k=rand()%16;
  84.                     }
  85.                 }
  86.                 num1[i]=k;
  87.                 str1[num1[i]/8]&=~(0x01<<(num1[i]%8));         //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  88.             }
  89.             P4=str1[0];                          //控制16個(gè)LED點(diǎn)亮
  90.             P3=str1[1];
  91.         }


  92.     if(Key1==0)//按鍵開始
  93. {
  94.   Delay_Us(500);//延時(shí)消抖
  95.    if(Key1==0)
  96. {
  97.   TR0 =!TR0;
  98. }
  99.             while(Key1==0);        //按鍵松手檢測(cè)
  100.         }
  101.         if(Key1==0)        //按鍵停止
  102.         {
  103.             Delay_Us(500);        //延時(shí)消抖
  104.             if(Key1==0)
  105.             {
  106.                 TR0=0;


  107.                 /*----33抽取6個(gè)LED-----*/
  108.                 for(i=0; i<5; i++) //所有燈熄滅
  109.                 {
  110.                     str[i]=0xff;
  111.                 }
  112.                 for(i=0; i<6; i++)
  113.                 {
  114.                     k=rand()%33; //產(chǎn)生隨機(jī)數(shù)0-32
  115.                     for(j=0; j<i ; j++)
  116.                     {
  117.                         while(num[j]==k)//如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  118.                         {
  119.                             k=rand()%33;
  120.                         }
  121.                     }
  122.                     num[i]=k;
  123.                     str[num[i]/8]&=~(0x01<<(num[i]%8));        //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  124.                 }
  125.                 P2=str[0];                          //控制35個(gè)LED點(diǎn)亮
  126.                 P0=str[1];
  127.                             P7=str[2];                          //控制35個(gè)LED點(diǎn)亮
  128.                 P6=str[3];
  129.                             P1=str[4];
  130.                 {
  131.                     UART_Send(str[i]);
  132.                 }


  133.                 /*----16抽取1個(gè)LED-----*/
  134.                 str1[0]=0xff;                          //12個(gè)LED全部熄滅
  135.                     str1[1]=0xff;
  136.                 for(i=0; i<1; i++)
  137.                 {
  138.                     k=rand()%16; //產(chǎn)生隨機(jī)數(shù)0-15
  139.                     for(j=0; j<i ; j++)
  140.                     {
  141.                         while(num1[j]==k)         //如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  142.                         {
  143.                             k=rand()%16;
  144.                         }
  145.                     }
  146.                     num1[i]=k;
  147.                     str1[num1[i]/8]&=~(0x01<<(num1[i]%8));         //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  148.                 }
  149.                 P4=str1[0];                          //控制16個(gè)LED點(diǎn)亮
  150.                 P3=str1[1];
  151.             }
  152.             while(Key1==0);        //按鍵松手檢測(cè)
  153.         }
  154.     }
  155. }




  156. void disp1()
  157. {
  158.     uchar i,j,k;                        //定義變量
  159.     UART_Init();                           //串口初始化
  160.     Timer_Init();                           //定時(shí)器初始化

  161.     P7M0=0X00;P7M1=0X00;//設(shè)置P0口為準(zhǔn)雙向口狀態(tài),弱上位
  162.            P2M0=0X00;P2M1=0X00;
  163.            P4M0=0X00;P4M1=0X00;
  164.            P0M0=0X00;P0M1=0X00;
  165.     P1M0=0X00;P1M1=0X00;
  166.         P3M0=0X00;P3M1=0X00;
  167.     P6M0=0X00;P6M1=0X00;

  168.     {   //35個(gè)LED初始狀態(tài),全部熄滅
  169.         UART_Send(str[i]);
  170.     }


  171.     P0=0xff;                          //12個(gè)LED初始狀態(tài),全部熄滅
  172.     P1=0xff;
  173.         P2=0xff;                          //12個(gè)LED初始狀態(tài),全部熄滅
  174.     P3=0xff;
  175.         P4=0xff;                          //12個(gè)LED初始狀態(tài),全部熄滅
  176.     P6=0xff;
  177.         P7=0xff;



  178.     while(2)
  179.     {
  180.         if(flag)         //定時(shí)時(shí)間到
  181.         {
  182.             flag=0;         //標(biāo)志位清零
  183.             /*----33抽取7個(gè)LED-----*/
  184.             for(i=0; i<5; i++)         //所有燈熄滅
  185.             {
  186.                 str[i]=0xff;
  187.             }
  188.             for(i=0; i<7; i++)
  189.             {
  190.                 k=rand()%33; //產(chǎn)生隨機(jī)數(shù)0-32
  191.                 for(j=0; j<i ; j++)
  192.                 {
  193.                     while(num2[j]==k)         //如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  194.                     {
  195.                         k=rand()%33;
  196.                     }
  197.                 }
  198.                 num2[i]=k;
  199.                 str[num2[i]/8]&=~(0x01<<(num2[i]%8));         //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  200.             }
  201.              P2=str[0];                          //控制35個(gè)LED點(diǎn)亮
  202.              P0=str[1];
  203.                          P7=str[2];                          //控制35個(gè)LED點(diǎn)亮
  204.              P6=str[3];
  205.                          P1=str[4];
  206.             {
  207.                 UART_Send(str[i]);
  208.             }



  209.             /*----16抽取2個(gè)LED-----*/
  210.             str1[0]=0xff;                          //12個(gè)LED全部熄滅
  211.             str1[1]=0xff;
  212.             for(i=0; i<2; i++)
  213.             {
  214.                 k=rand()%16; //產(chǎn)生隨機(jī)數(shù)0-15
  215.                 for(j=0; j<i ; j++)
  216.                 {
  217.                     while(num3[j]==k)         //如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  218.                     {
  219.                         k=rand()%16;
  220.                     }
  221.                 }
  222.                 num3[i]=k;
  223.                 str1[num3[i]/8]&=~(0x01<<(num3[i]%8));         //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  224.             }
  225.             P4=str1[0];                          //控制16個(gè)LED點(diǎn)亮
  226.             P3=str1[1];
  227.         }


  228.    if(Key2==0)//按鍵開始
  229. {
  230.   Delay_Us(500);//延時(shí)消抖
  231.    if(Key2==0)
  232. {
  233.   TR0 =!TR0;
  234. }
  235.             while(Key2==0);        //按鍵松手檢測(cè)
  236.         }
  237.         if(Key2==0)        //按鍵停止
  238.         {
  239.             Delay_Us(500);        //延時(shí)消抖
  240.             if(Key2==0)
  241.             {
  242.                 TR0=0;


  243.                 /*----33抽取7個(gè)LED-----*/
  244.                 for(i=0; i<5; i++) //所有燈熄滅
  245.                 {
  246.                     str[i]=0xff;
  247.                 }
  248.                 for(i=0; i<7; i++)
  249.                 {
  250.                     k=rand()%33; //產(chǎn)生隨機(jī)數(shù)0-32
  251.                     for(j=0; j<i ; j++)
  252.                     {
  253.                         while(num2[j]==k)//如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  254.                         {
  255.                             k=rand()%33;
  256.                         }
  257.                     }
  258.                     num2[i]=k;
  259.                     str[num2[i]/8]&=~(0x01<<(num2[i]%8));        //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  260.                 }
  261.                 P2=str[0];                          //控制35個(gè)LED點(diǎn)亮
  262.                 P0=str[1];
  263.                             P7=str[2];                          //控制35個(gè)LED點(diǎn)亮
  264.                 P6=str[3];
  265.                             P1=str[4];
  266.                 {
  267.                     UART_Send(str[i]);
  268.                 }


  269.                 /*----16抽取2個(gè)LED-----*/
  270.                 str1[0]=0xff;                          //12個(gè)LED全部熄滅
  271.                     str1[1]=0xff;
  272.                 for(i=0; i<2; i++)
  273.                 {
  274.                     k=rand()%16; //產(chǎn)生隨機(jī)數(shù)0-15
  275.                     for(j=0; j<i ; j++)
  276.                     {
  277.                         while(num3[j]==k)         //如果產(chǎn)生的隨機(jī)數(shù)與之前的相同,則重新生成
  278.                         {
  279.                             k=rand()%16;
  280.                         }
  281.                     }
  282.                     num3[i]=k;
  283.                     str1[num3[i]/8]&=~(0x01<<(num3[i]%8));         //將隨機(jī)數(shù)轉(zhuǎn)換為對(duì)應(yīng)的LED數(shù)據(jù)
  284.                 }
  285.                 P4=str1[0];                          //控制16個(gè)LED點(diǎn)亮
  286.                 P3=str1[1];
  287.             }
  288.             while(Key2==0);        //按鍵松手檢測(cè)
  289.         }
  290.     }
  291. }


  292. void main()
  293. {
  294. while(1)
  295. {
  296.          if(Key1==0)//按鍵開始
  297. {
  298. Delay_Us(500);//延時(shí)消抖
  299. if(Key1==0)
  300. {
  301. disp0(); //12選2
  302. }
  303. while(Key1==0);
  304.   }

  305.       if(Key2==0)//按鍵開始
  306. {
  307. Delay_Us(500);//延時(shí)消抖
  308. if(Key2==0)
  309. {
  310. disp1(); //12選4
  311. }
  312. while(Key2==0);
  313.   }
  314. }
  315. }




  316. //延時(shí)函數(shù)
  317. void Delay_Us(int i)
  318. {
  319.     while(i--);
  320. }
  321. //定時(shí)器初始化
  322. void Timer_Init(void)
  323. {
  324.     TMOD|=0x01; //打開定時(shí)器0,1,工作方式1。
  325.     TH0=0x3c;        //給定時(shí)器0賦初值,定時(shí)50ms
  326.     TL0=0xb0;
  327.     ET0=1;      //打開定時(shí)器0中斷允許
  328.     TR0=0;                //打開定時(shí)器
  329.     PS=1;
  330.     EA=1;       //打開總中斷
  331. }
  332. //串口初始化
  333. void UART_Init(void)
  334. {
  335.     SM0=0;                //串口模式0:同步移位寄存器方式
  336.     SM1=0;
  337.     TI=0;                //發(fā)送中斷清零
  338. }
  339. //串口發(fā)送數(shù)據(jù),移位寄存器模式
  340. void UART_Send(uchar dat)
  341. {

  342.     SBUF=dat;          //LED數(shù)據(jù)
  343.     while(~TI);                 //等待發(fā)送完成
  344.     TI=0;                        //標(biāo)志位清零

  345. }
  346. //定時(shí)器0中斷函數(shù)disp0
  347. void Timer0() interrupt 1
  348. {
  349.     TH0=0x3c;   //定時(shí)50ms
  350.     TL0=0xb0;
  351.     cnt++;                //中斷計(jì)數(shù)
  352.     if(cnt==3)
  353.     {
  354.         cnt=0;
  355.         flag=1;        //標(biāo)志位置1
  356.     }
  357. }
復(fù)制代碼

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

使用道具 舉報(bào)

沙發(fā)
ID:1105755 發(fā)表于 2024-6-26 23:19 | 只看該作者
剛開始整,判斷按鍵這個(gè)地方始終沒整對(duì),拜托大家給看看怎么改,萬分感謝!
回復(fù)

使用道具 舉報(bào)

板凳
ID:1109793 發(fā)表于 2024-6-27 07:37 | 只看該作者
水平有限,程序太長(zhǎng),根本看不懂。單片機(jī)還能取隨機(jī)數(shù)?上電時(shí)不是都清零了嗎?就算不清零,那點(diǎn)內(nèi)存能取幾個(gè)啊?
回復(fù)

使用道具 舉報(bào)

地板
ID:1121801 發(fā)表于 2024-6-27 08:13 | 只看該作者
給你個(gè)檢驗(yàn)程序是否有問題的方法,你可以編寫一個(gè)超級(jí)簡(jiǎn)單的兩個(gè)子程序,每個(gè)子程序只一個(gè)引腳輸出,這樣子程序就會(huì)極大簡(jiǎn)化,這時(shí)候再加上你想實(shí)現(xiàn)的按鍵轉(zhuǎn)換功能,因?yàn)槌绦虺?jí)簡(jiǎn)單,很容易就可以分析出來到底是按鍵程序問題還是延時(shí)問題等等,可以試驗(yàn)?zāi)愕南敕ǖ降资遣皇强梢詫?shí)現(xiàn)的。如果按鍵對(duì)兩個(gè)簡(jiǎn)單子程序是可以實(shí)現(xiàn)操控的,那么再在兩個(gè)子程序上去更改,取得你想要的功能。
回復(fù)

使用道具 舉報(bào)

5#
ID:53813 發(fā)表于 2024-6-27 09:58 | 只看該作者
第210行,WHILE(2)是什么意思?
回復(fù)

使用道具 舉報(bào)

6#
ID:1121700 發(fā)表于 2024-6-27 10:16 | 只看該作者
估計(jì)是按鍵消抖的問題,先單獨(dú)測(cè)試按鍵消抖程序是否正常。
回復(fù)

使用道具 舉報(bào)

7#
ID:192020 發(fā)表于 2024-6-27 10:37 | 只看該作者
別的不說,347行main函數(shù)已經(jīng)結(jié)束了,349行后的應(yīng)該會(huì)報(bào)錯(cuò)吧?
回復(fù)

使用道具 舉報(bào)

8#
ID:846819 發(fā)表于 2024-6-27 17:13 | 只看該作者
disp0()和disp1()都是無限循環(huán)的任務(wù),while(1)沒有退出語句,進(jìn)入任何一個(gè)任務(wù)都不能返回。試下在兩個(gè)任務(wù)的合適位置加個(gè)break看看可以不。
回復(fù)

使用道具 舉報(bào)

9#
ID:1105755 發(fā)表于 2024-6-28 09:58 | 只看該作者
cyi8 發(fā)表于 2024-6-27 08:13
給你個(gè)檢驗(yàn)程序是否有問題的方法,你可以編寫一個(gè)超級(jí)簡(jiǎn)單的兩個(gè)子程序,每個(gè)子程序只一個(gè)引腳輸出,這樣子 ...

好,我試試
回復(fù)

使用道具 舉報(bào)

10#
ID:1105755 發(fā)表于 2024-6-28 09:59 | 只看該作者
三極管一樣的人 發(fā)表于 2024-6-27 09:58
第210行,WHILE(2)是什么意思?

我是業(yè)余選手,這個(gè)是用別人的程序改的
回復(fù)

使用道具 舉報(bào)

11#
ID:1105755 發(fā)表于 2024-6-28 10:00 | 只看該作者
tgyd 發(fā)表于 2024-6-27 17:13
disp0()和disp1()都是無限循環(huán)的任務(wù),while(1)沒有退出語句,進(jìn)入任何一個(gè)任務(wù)都不能返回。試下在兩個(gè)任務(wù) ...

我試試吧
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产成人福利视频 | 国产在线精品一区二区三区 | 久久狠狠| 99精品免费 | 91正在播放| 日韩在线播放一区 | 久久久久精 | 亚洲视频中文字幕 | 国产日产欧产精品精品推荐蛮挑 | 一区二区三区四区在线免费观看 | 亚洲一区在线观看视频 | 欧美国产中文字幕 | 成人在线网址 | 国产精品www | 精品国产18久久久久久二百 | 69福利影院 | 午夜一级大片 | aaaaaaa片毛片免费观看 | 国产精品久久久久aaaa樱花 | 午夜影院在线观看视频 | 国产在线精品一区二区三区 | 国产精品a久久久久 | 欧美综合国产精品久久丁香 | 亚洲精品一区二区另类图片 | 久久av一区二区 | 日韩高清黄色 | 久久久久久久久久久91 | 欧美久久一级 | 7777久久| 91久久国产综合久久 | 麻豆一区二区三区精品视频 | 91麻豆精品国产91久久久资源速度 | 99久久久久久 | 亚洲精品一区国产精品 | 日韩淫片免费看 | 色久伊人 | 久久久久亚洲精品 | 婷婷91| 久久噜噜噜精品国产亚洲综合 | 日本免费小视频 | 欧美激情久久久 |