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

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

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)八位搶答器,液晶顯示方面有些問(wèn)題求教大神

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
這是我自己花了好久,查了很多資料做的八位搶答器,其他功能現(xiàn)已全部實(shí)現(xiàn),但是關(guān)于液晶屏顯示方面,依然有些問(wèn)題。
我用液晶屏做了一個(gè)分?jǐn)?shù)顯示器,一開(kāi)始八個(gè)選手都是零分時(shí)顯示沒(méi)有問(wèn)題,但是我在搶答結(jié)束后進(jìn)行加減分操作后,顯示就出現(xiàn)了問(wèn)題,檢查了很多地方都不知道哪兒出現(xiàn)了問(wèn)題,希望有大佬看到幫忙解答一下,萬(wàn)分感謝!!源程序?qū)嵲谶^(guò)長(zhǎng),都放在附件里了,麻煩了。


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uint unsigned int
  4. #define uchar unsigned char
  5. void delay(uint z)                        //1ms延時(shí)
  6. {
  7.         uint x,y;
  8.         for(x=z;x>0;x--)
  9.                 for(y=110;y>0;y--);
  10. }                                                                                                        

  11. uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,   //編碼表1-F和-
  12.                     0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x40};
  13. uchar code tablewei[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//各位燈亮
  14. const uchar code ZF_tab[] =
  15. {
  16.         0xF8,0xFC,0x04,0xC4,0x24,0xFC,0xF8,0x00,  // -0-
  17.         0x07,0x0F,0x09,0x08,0x08,0x0F,0x07,0x00,

  18.         0x00,0x10,0x18,0xFC,0xFC,0x00,0x00,0x00,  // -1-
  19.         0x00,0x08,0x08,0x0F,0x0F,0x08,0x08,0x00,

  20.         0x08,0x0C,0x84,0xC4,0x64,0x3C,0x18,0x00,  // -2-
  21.         0x0E,0x0F,0x09,0x08,0x08,0x0C,0x0C,0x00,

  22.         0x08,0x0C,0x44,0x44,0x44,0xFC,0xB8,0x00,  // -3-
  23.         0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,

  24.         0xC0,0xE0,0xB0,0x98,0xFC,0xFC,0x80,0x00,  // -4-
  25.         0x00,0x00,0x00,0x08,0x0F,0x0F,0x08,0x00,

  26.         0x7C,0x7C,0x44,0x44,0xC4,0xC4,0x84,0x00,  // -5-
  27.         0x04,0x0C,0x08,0x08,0x08,0x0F,0x07,0x00,

  28.         0xF0,0xF8,0x4C,0x44,0x44,0xC0,0x80,0x00,  // -6-
  29.         0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,

  30.         0x0C,0x0C,0x04,0x84,0xC4,0x7C,0x3C,0x00,  // -7-
  31.         0x00,0x00,0x0F,0x0F,0x00,0x00,0x00,0x00,

  32.         0xB8,0xFC,0x44,0x44,0x44,0xFC,0xB8,0x00,  // -8-
  33.         0x07,0x0F,0x08,0x08,0x08,0x0F,0x07,0x00,   

  34.         0x38,0x7C,0x44,0x44,0x44,0xFC,0xF8,0x00,  // -9-
  35.         0x00,0x08,0x08,0x08,0x0C,0x07,0x03,0x00,
  36. };
  37. sbit beep=P2^3;//蜂鳴器
  38. sbit deng=P2^5;//燈鎖存
  39. sbit duan=P2^6;//段鎖存
  40. sbit wei=P2^7;//位鎖存
  41. sbit key1=P1^0;//八個(gè)選手
  42. sbit key2=P1^1;
  43. sbit key3=P1^2;
  44. sbit key4=P1^3;
  45. sbit key5=P1^4;
  46. sbit key6=P1^5;
  47. sbit key7=P1^6;
  48. sbit key8=P1^7;
  49. sbit keyks=P2^0;//開(kāi)始
  50. sbit keyjia=P2^1;//加
  51. sbit keyjian=P2^2;//減
  52. sbit keyfw=P2^4;//復(fù)位
  53. sbit keysz=P3^0;//設(shè)置,按一次設(shè)置搶答時(shí)間,按兩次設(shè)置答題時(shí)間,按三次返回
  54. sbit keyqc=P3^1;//清除積分
  55. sbit ye=P3^2;//液晶鎖存
  56. sbit Reset = P3^3;   //復(fù)位
  57. sbit RS = P3^5;    //指令數(shù)據(jù)選擇
  58. sbit E = P3^4;    //指令數(shù)據(jù)控制
  59. sbit CS1 = P3^6;   //左屏幕選擇,低電平有效
  60. sbit CS2 = P3^7;   //右屏幕選擇
  61. uchar  *ZF;        //數(shù)據(jù)指針,ZF為首地址         
  62. uchar d,x,y;
  63. uchar num;//選手編號(hào)
  64. uchar t0,t1,t2,t3,t4,s3;//定時(shí)器時(shí)間
  65. uchar dtds,dtds1;//答題定時(shí),設(shè)置答題定時(shí)
  66. uchar ds,ds1;//搶答定時(shí),設(shè)置搶答定時(shí)
  67. uchar kaif;//開(kāi)始標(biāo)記,0表示未開(kāi)始,1表示開(kāi)始
  68. uchar wanf;//搶答完成標(biāo)記,0表示未完成,1表示完成
  69. uchar daf;//開(kāi)始答題標(biāo)記,0表示未開(kāi)始答題,1表示3s倒計(jì)時(shí),2表示開(kāi)始答題倒計(jì)時(shí)
  70. uchar setf;//設(shè)置標(biāo)記,0表示未在設(shè)置中,1表示正在設(shè)置搶答定時(shí),2表示正在設(shè)置答題定時(shí)
  71. uchar temp;//流水燈
  72. uchar q;//8人按鍵選擇
  73. uchar fen;//分?jǐn)?shù)的中間量
  74. uchar fen1;//八個(gè)選手的分?jǐn)?shù)
  75. uchar fen2;
  76. uchar fen3;
  77. uchar fen4;
  78. uchar fen5;
  79. uchar fen6;
  80. uchar fen7;
  81. uchar fen8;
  82. uchar f1,f2,f3,f4,f5,f6,f7,f8;
  83. void init()                                                                                                //初始化子程序
  84. {
  85.         deng=0;//關(guān)燈鎖存
  86.         duan=0;//關(guān)段鎖存
  87.         wei=0;//關(guān)位鎖存
  88.         beep=1;//關(guān)蜂鳴器
  89.         keyks=1;//開(kāi)始按鍵置1
  90.         keyfw=1;//復(fù)位按鍵置1
  91.         keyjia=1;//加時(shí)間按鍵置1
  92.         keyjian=1;//減時(shí)間按鍵置1
  93.         P1=0xff;//P1口置1
  94.         dtds=dtds1;//設(shè)置答題時(shí)間
  95.         ds=ds1;//設(shè)置搶答時(shí)間
  96.         temp=0xfe;
  97.         t0=0;
  98.         t1=0;
  99.         t2=0;
  100.         t3=0;
  101.         t4=0;
  102.         s3=3;
  103.         kaif=0;//開(kāi)始標(biāo)記置0
  104.         wanf=0;//搶答完成標(biāo)記置0
  105.         daf=0;//答題標(biāo)記置0
  106.         setf=0;//設(shè)置標(biāo)記置0
  107.         TMOD=0x11;//設(shè)置定時(shí)器0為方式1
  108.         TH0=(65536-50000)/256;//設(shè)置50ms
  109.         TL0=(65536-50000)%256;
  110.         EA=1;//開(kāi)總中斷
  111.   ET0=1;//開(kāi)定時(shí)器0中斷
  112.         TR0=0;//啟動(dòng)定時(shí)器0
  113.         TH1=(65536-50000)/256;//設(shè)置50ms
  114.         TL1=(65536-50000)%256;
  115.         ET1=1;//開(kāi)定時(shí)器1中斷
  116.         TR1=1;//啟動(dòng)定時(shí)器1
  117. }

  118. void Time0() interrupt 1                                         //定時(shí)器0中斷
  119. {
  120.   TH0=(65536-50000)/256;
  121.         TL0=(65536-50000)%256;
  122.         if(daf==0)//未開(kāi)始答題,顯示搶答倒計(jì)時(shí)
  123.         {
  124.                 t0++;
  125.                 if(t0==20)//1s計(jì)時(shí)
  126.                 {t0=0;ds--;}
  127.         }
  128.         if(daf==1)//開(kāi)始答題之前的3秒倒計(jì)時(shí)
  129.         {
  130.                 t2++;
  131.                 if(t2==20)
  132.                 {
  133.                         t2=0;
  134.                         s3--;
  135.                         if(s3==0)
  136.                         {
  137.                                 beep=0;
  138.                                 delay(100);
  139.                                 beep=1;
  140.                                 daf=2;
  141.                         }
  142.                 }
  143.         }
  144.         if(daf==2)//開(kāi)始答題倒計(jì)時(shí)
  145.         {
  146.                 t3++;
  147.                 if(t3==20)
  148.                 {t3=0;dtds--;}
  149.         }
  150.         if(ds<=6||dtds<=6)//5秒內(nèi)蜂鳴器報(bào)警
  151.         {
  152.                 t4++;
  153.                 if(t4==20)
  154.                 {
  155.                         t4=0;
  156.                         beep=0;
  157.                         delay(100);
  158.                         beep=1;
  159.                 }
  160.         }
  161.         if(ds==0||dtds==0)//計(jì)時(shí)到0,關(guān)閉定時(shí)器
  162.         {
  163.                 wanf=1;
  164.                 beep=0;
  165.                 delay(5);
  166.                 TR0=0;
  167.         }
  168. }        
  169. void Time1() interrupt 3                                         //定時(shí)器1中斷
  170. {
  171.   TH1=(65536-50000)/256;
  172.         TL1=(65536-50000)%256;
  173.         t1++;
  174.         if(t1==10)//1s計(jì)時(shí)
  175.         {t1=0;temp=_crol_(temp,1);}//流水燈循環(huán)左移

  176. }        
  177. void liushui()                                                                                //流水燈
  178. {
  179.                 P0=temp;//燈亮
  180.                 deng=1;
  181.                 deng=0;
  182.                
  183.                 P0=0xfe;
  184.           wei=1;
  185.                 wei=0;
  186. }
  187. void chushi()                                                                                        //數(shù)碼管初始化 顯示四個(gè)-
  188. {
  189.                 P0=table[16];//第一位顯示-
  190.           duan=1;
  191.                 duan=0;
  192.                 delay(5);
  193.         
  194.                 P0=0xfd;
  195.           wei=1;
  196.                 wei=0;

  197.                 P0=table[16];//第二位顯示-
  198.           duan=1;
  199.                 duan=0;
  200.                 delay(5);
  201.         
  202.                 P0=0xfb;
  203.           wei=1;
  204.                 wei=0;

  205.                 P0=table[16];//第三位顯示-
  206.           duan=1;
  207.                 duan=0;
  208.                 delay(5);
  209.                
  210.                 P0=0xf7;
  211.           wei=1;
  212.                 wei=0;

  213.                 P0=table[16];//第四位顯示-
  214.           duan=1;
  215.                 duan=0;
  216.                 delay(5);
  217. }
  218. void shuzi(uchar a,uchar b)                                //數(shù)碼管時(shí)間號(hào)碼顯示
  219. {
  220.                 uchar shi,ge;
  221.                 shi=a/10;
  222.           ge=a%10;
  223.                
  224.                 P0=0xfe;
  225.           wei=1;
  226.                 wei=0;
  227.                         
  228.           P0=table[shi];//第一位顯示十位
  229.           duan=1;        
  230.                 duan=0;
  231.                 delay(5);
  232.         
  233.     P0=0xfd;
  234.           wei=1;
  235.                 wei=0;

  236.                 P0=table[ge];//第二位顯示各位
  237.           duan=1;
  238.                 duan=0;
  239.                 delay(5);
  240.                
  241.                 P0=0xfb;
  242.           wei=1;
  243.                 wei=0;

  244.                 P0=table[16];//第三位顯示-
  245.           duan=1;
  246.                 duan=0;
  247.                 delay(5);
  248.                
  249.                 P0=0xf7;
  250.           wei=1;
  251.                 wei=0;

  252.                 P0=table[b];//第四位顯示選手號(hào)碼
  253.           duan=1;
  254.                 duan=0;
  255.                 delay(5);
  256.                

  257. }

  258. void baojing(uchar c)                                                        //違規(guī)報(bào)警
  259. {
  260.           P0=0xfe;
  261.           wei=1;
  262.                 wei=0;
  263.                         
  264.           P0=table[15];//第一位顯示F
  265.           duan=1;        
  266.                 duan=0;
  267.                 delay(5);
  268.         
  269.     P0=0xfd;
  270.           wei=1;
  271.                 wei=0;

  272.                 P0=table[15];//第二位顯示F
  273.           duan=1;
  274.                 duan=0;
  275.                 delay(5);
  276.                
  277.                 P0=0xfb;
  278.           wei=1;
  279.                 wei=0;

  280.                 P0=table[16];//第三位顯示-
  281.           duan=1;
  282.                 duan=0;
  283.                 delay(5);
  284.                
  285.                 P0=0xf7;
  286.           wei=1;
  287.                 wei=0;

  288.                 P0=table[c];//第四位顯示選手號(hào)碼
  289.           duan=1;
  290.                 duan=0;
  291.                 delay(5);
  292.                
  293.                 beep=0;//蜂鳴器報(bào)警
  294.                 delay(5);
  295. }
  296. void szxianshi(uchar d,uchar e)                //數(shù)碼管設(shè)置時(shí)的顯示
  297. {
  298.                 uchar dshi,dge,eshi,ege;
  299.                 dshi=d/10;
  300.                 dge=d%10;
  301.                 eshi=e/10;
  302.                 ege=e%10;
  303.                
  304.                 P0=0xfe;
  305.                 wei=1;
  306.                 wei=0;
  307.                                 
  308.                 P0=table[dshi];//第一位顯示搶答定時(shí)十位
  309.           duan=1;        
  310.                 duan=0;
  311.                 delay(5);
  312.         
  313.     P0=0xfd;
  314.           wei=1;
  315.                 wei=0;

  316.                 P0=table[dge];//第二位顯示搶答定時(shí)個(gè)位
  317.           duan=1;
  318.                 duan=0;
  319.                 delay(5);
  320.                
  321.                 P0=0xfb;
  322.           wei=1;
  323.                 wei=0;

  324.                 P0=table[eshi];//第三位顯示答題定時(shí)十位
  325.           duan=1;
  326.                 duan=0;
  327.                 delay(5);
  328.                
  329.                 P0=0xf7;
  330.           wei=1;
  331.                 wei=0;

  332.                 P0=table[ege];//第四位顯示答題定時(shí)個(gè)位
  333.           duan=1;
  334.                 duan=0;
  335.                 delay(5);
  336. }
  337. void shezhi()                                                                                        //設(shè)置搶答時(shí)間和答題時(shí)間
  338. {
  339. if(keysz==0)//判斷按下一次設(shè)置按鍵
  340. {
  341.                 delay(5);//延時(shí)消抖
  342.                 if(keysz==0)
  343.                 {
  344.                         while(!keysz);//松手判斷
  345.       setf++;//setf標(biāo)志加1
  346.                         while(setf==1)//設(shè)置搶答時(shí)間
  347.                         {
  348.                                 liushui();
  349.                                 szxianshi(ds1,dtds1);//顯示搶答時(shí)間和答題時(shí)間
  350.                                 if(keyjia==0)//加搶答時(shí)間
  351.                                 {
  352.                                         delay(5);
  353.                                         if(keyjia==0)
  354.                                         {
  355.                                                 while(!keyjia);
  356.                                                 ds1++;
  357.                                                 ds=ds1;
  358.                                                 if(ds1>99)ds1=0;
  359.                                         }
  360.                                 }
  361.                                 if(keyjian==0)//減搶答時(shí)間
  362.                                 {
  363.                                         delay(5);
  364.                                         if(keyjian==0)
  365.                                         {
  366.                                                 while(!keyjian);
  367.                                                 ds1--;
  368.                                                 ds=ds1;
  369.                                         }
  370.                                 }
  371.                                 if(keysz==0)//判斷按下第二次設(shè)置按鍵
  372.                                 {
  373.                                         delay(5);//延時(shí)消抖
  374.                                         if(keysz==0)
  375.                                         {
  376.                                                 while(!keysz);//松手判斷
  377.                                                 setf++;//setf標(biāo)志加1
  378.                                         }
  379.                                 }
  380.                          }
  381.                                 while(setf==2)//設(shè)置答題時(shí)間
  382.                                 {
  383.                                         liushui();
  384.                                         szxianshi(ds1,dtds1);//顯示搶答時(shí)間和答題時(shí)間
  385.                                         if(keyjia==0)//加答題時(shí)間
  386.                                         {
  387.                                                 delay(5);
  388.                                                 if(keyjia==0)
  389.                                                 {
  390.                                                         while(!keyjia);
  391.                                                         dtds1++;
  392.                                                         dtds=dtds1;
  393.                                                         if(dtds1>99)dtds1=0;
  394.                                                 }
  395.                                         }
  396.                                         if(keyjian==0)//減答題時(shí)間
  397.                                         {
  398.                                                 delay(5);
  399.                                                 if(keyjian==0)
  400.                                                 {
  401.                                                         while(!keyjian);
  402.                                                         dtds1--;
  403.                                                         dtds=dtds1;
  404.                                                 }
  405.                                         }
  406.                                         if(keysz==0)//判斷按下第三次設(shè)置按鍵
  407.                                         {
  408.                                                 delay(5);//延時(shí)消抖
  409.                                                 if(keysz==0)
  410.                                                 {
  411.                                                         while(!keysz);//松手判斷
  412.                                                         setf++;//setf標(biāo)志加1
  413.                                                 }
  414.                                         }
  415.                                 }
  416.                                 if(setf==3)//setf標(biāo)志滿3清0
  417.                                 {
  418.                                         setf=0;
  419.                                         chushi();//數(shù)碼管初始化
  420.                                 }
  421.                 }        
  422. }                        
  423. }
  424. void xuanze()                                                                                        //8個(gè)選手按鍵選擇
  425. {
  426.                         switch (q)//num對(duì)q進(jìn)行選擇
  427.                 {
  428.                         case 0xfe:num=1;break;
  429.                         case 0xfd:num=2;break;
  430.                         case 0xfb:num=3;break;
  431.                         case 0xf7:num=4;break;
  432.                         case 0xef:num=5;break;
  433.                         case 0xdf:num=6;break;
  434.                         case 0xbf:num=7;break;
  435.                         case 0x7f:num=8;break;
  436.                 }
  437.                 P0=tablewei[num-1];//對(duì)應(yīng)燈亮
  438.                 deng=1;
  439.                 deng=0;
  440. }
  441. void scan()                                                                                                //鍵盤掃描
  442. {
  443. if(P1!=0xff&&wanf==0&&kaif==1)//判斷是否有人按下
  444. {
  445.         delay(5);//延時(shí)消抖
  446.         if(P1!=0xff&&wanf==0&&kaif==1)
  447.         {
  448.                 q=P1;
  449.                 while(P1!=0xff);//松手判斷
  450.                 beep=0;
  451.                 delay(100);
  452.                 beep=1;
  453.                 wanf=1;//搶答完成
  454.                 daf=1;//開(kāi)始答題
  455.                 xuanze();//8人按鍵選擇
  456.         }
  457. }
  458. }

  459. void jifen()                                                                                        //計(jì)分子函數(shù)
  460. {
  461.         switch(num)//對(duì)選手號(hào)碼進(jìn)行選擇,給fen賦值
  462.         {
  463.                 case 1:fen=fen1;break;
  464.                 case 2:fen=fen2;break;
  465.                 case 3:fen=fen3;break;
  466.                 case 4:fen=fen4;break;
  467.                 case 5:fen=fen5;break;
  468.                 case 6:fen=fen6;break;
  469.                 case 7:fen=fen7;break;
  470.                 case 8:fen=fen8;break;
  471.         }
  472.         if(keyjia==0)//加分
  473.         {
  474.                 delay(5);
  475.                 if(keyjia==0)
  476.                 {
  477.                         while(!keyjia);
  478.                         fen=fen+10;
  479.                 }
  480.         }
  481.                 if(keyjian==0)//減分
  482.         {
  483.                 delay(5);
  484.                 if(keyjian==0)
  485.                 {
  486.                         while(!keyjian);
  487.                         fen=fen-10;
  488.                 }
  489.         }
  490.         switch(num)//對(duì)選手號(hào)碼進(jìn)行選擇, 把fen值賦給選手
  491.         {
  492.                 case 1:fen1=fen;f1=fen1;break;
  493.                 case 2:fen2=fen;f2=fen2;break;
  494.                 case 3:fen3=fen;f3=fen3;break;
  495.                 case 4:fen4=fen;f4=fen4;break;
  496.                 case 5:fen5=fen;f5=fen5;break;
  497.                 case 6:fen6=fen;f6=fen6;break;
  498.                 case 7:fen7=fen;f7=fen7;break;
  499.                 case 8:fen8=fen;f8=fen8;break;
  500.         }
  501. }
  502. void delayus(uint time)        //延時(shí)
  503.          {
  504.            while(time --);
  505.          }

  506. void writedata(uchar dat)        //寫(xiě)數(shù)據(jù)
  507. {
  508.          delayus(5);
  509.          E = 1;        
  510.          RS = 1;
  511.          P0 = dat;
  512.          ye=1;
  513.          ye=0;
  514.          E = 0;
  515. }
  516. void writecmd(uchar cmd)          //寫(xiě)地址/命令
  517. {
  518.   delayus(5);
  519.   E = 1;        
  520.         RS = 0;
  521.   P0 = cmd;
  522.         ye=1;
  523.         ye=0;
  524.   E = 0;
  525. }
  526. void setPM(uchar PM) //選擇屏幕( 0-左屏,1-右屏,2-全屏  )
  527. {
  528. switch(PM)
  529. {
  530.    case 0 :         CS1 = 0;         CS2 = 1;   break;
  531.    case 1 :         CS1 = 1;    CS2 = 0;   break;
  532.    default :    CS1 = 0;    CS2 = 0;
  533. }
  534. }
  535. void set_x( x)  //x -> 0 : 7 頁(yè)
  536. {
  537. x = x&0x07|0xb8;         
  538. writecmd(x);
  539. }
  540.                
  541. void set_y( y) //y -> 0 :63 列
  542. {
  543. y = y & 0x3f|0x40;         
  544. writecmd(y);
  545. }

  546. void chearPM(uchar PM)  //清屏(0-清左屏,1-清右屏,2-清全屏 )
  547. {
  548.    uchar i,j;
  549.    setPM(PM);
  550.          for(i = 0;i < 8;i++)         
  551.            {
  552.                   set_x(i);                   //從第0到第7頁(yè)
  553.                   set_y(0);                                //從第0列開(kāi)始
  554.                   for(j = 0;j < 64; j++)        //在PM=2的情況下左右半屏同時(shí)全寫(xiě)0.
  555.                   writedata(0x00);         
  556.            }   
  557. }        
  558. void InitLcd()                  //LCD初始化
  559. {
  560.   Reset = 0;        
  561.         delayus(2);
  562.         Reset = 1;        
  563.         delayus(2);//軟件復(fù)位                    
  564.   chearPM(2);        //清屏
  565. }
  566. void showZF( x, y, uchar *ZF)          //顯示一個(gè)字符
  567. {
  568. uchar i;
  569. set_x(x); set_y(y);                            //設(shè)置頁(yè)地址,設(shè)置列地址
  570. for(i = 0;i < 8;i ++) writedata(*(ZF++));        // 寫(xiě)字符的上半部分
  571. set_x(x + 1);set_y(y);         
  572. for(i = 0;i < 8;i ++)        writedata(*(ZF++));         // 寫(xiě)字符的下半部分
  573. }
  574. void display()//液晶顯示
  575. {
  576.         setPM(0);
  577.         showZF(0,1,ZF_tab+16);
  578.         showZF(0,17,ZF_tab+f1*16);
  579.         showZF(0,25,ZF_tab);
  580.         
  581.         showZF(2,1,ZF_tab+32);
  582.         showZF(2,17,ZF_tab+f2*16);
  583.         showZF(2,25,ZF_tab);
  584.         
  585.         showZF(4,1,ZF_tab+48);
  586.         showZF(4,17,ZF_tab+f3*16);
  587.         showZF(4,25,ZF_tab);
  588.         
  589.         showZF(6,1,ZF_tab+64);
  590.         showZF(6,17,ZF_tab+f4*16);
  591.         showZF(6,25,ZF_tab);

  592.         setPM(1);
  593.         showZF(0,1,ZF_tab+80);
  594.         showZF(0,17,ZF_tab+f5*16);
  595.         showZF(0,25,ZF_tab);
  596.         
  597.         showZF(2,1,ZF_tab+96);
  598.         showZF(2,17,ZF_tab+f6*16);
  599.         showZF(2,25,ZF_tab);
  600.         
  601.         showZF(4,1,ZF_tab+112);
  602.         showZF(4,17,ZF_tab+f7*16);
  603.         showZF(4,25,ZF_tab);
  604.         
  605.         showZF(6,1,ZF_tab+128);
  606.         showZF(6,17,ZF_tab+f8*16);
  607.         showZF(6,25,ZF_tab);
  608.         setPM(2);
  609. }
  610. void main()                                                                                    //主函數(shù)
  611. {
  612.                         ds1=60;//搶答時(shí)間和答題時(shí)間初始化
  613.                         dtds1=60;
  614.                         ye=0;
  615.                         InitLcd();
  616.         
  617. LOOP0:fen=0;//分?jǐn)?shù)初始化
  618.                         fen1=0;
  619.                         fen2=0;
  620.                         fen3=0;
  621.                         fen4=0;
  622.                         fen5=0;
  623.                         fen6=0;
  624.                         fen7=0;
  625.                         fen8=0;
  626.                         f1=fen1/10;
  627.                         f2=fen2/10;
  628.                         f3=fen3/10;
  629.                         f4=fen4/10;
  630.                         f5=fen5/10;
  631.                         f6=fen6/10;
  632.                         f7=fen7/10;
  633.                         f8=fen8/10;
  634.         
  635. LOOP1:init();//初始化子函數(shù)
  636.                         while(kaif==0)//搶答未開(kāi)始
  637.                         {
  638.                                 liushui();//流水燈
  639.                                 chushi();//數(shù)碼管初始狀態(tài)
  640.                                 shezhi();//搶答時(shí)間和答題時(shí)間的設(shè)置
  641.                                 display();
  642.                                 if(keyqc==0)
  643.                                 {
  644.                                         delay(5);
  645.                                         if(keyqc==0)
  646.                                         {
  647.                                                 while(!keyqc);
  648.                                                 goto LOOP0;
  649.                                         }
  650.                                 }
  651.                                 if(kaif==0&&P1!=0xff)//判斷是否有違規(guī)搶答
  652.                                 {
  653.                                         delay(5);
  654.                                         if(kaif==0&&P1!=0xff)
  655.                                         {
  656.                                                 q=P1;
  657.                                                 while(P1!=0xff);//松手判斷
  658.                                                 while(1)
  659.                                                 {
  660.                                                         xuanze();//8人按鍵選擇
  661.                                                         baojing(num);//違規(guī)報(bào)警
  662.                                                         if(keyfw==0)goto LOOP1;//回到初始化子程序
  663.                                                 }
  664.                                         }
  665.                                 }
  666.                                 if(keyks==0&&setf==0)//判斷搶答是否開(kāi)始
  667.                                 {
  668.                                         delay(5);//延時(shí)消抖
  669.                                         if(keyks==0)
  670.                                         {
  671.                                                 while(!keyks);//松手判斷
  672.                                                 beep=0;
  673.                                                 delay(100);
  674.                                                 beep=1;
  675.                                                 P0=0xff;//關(guān)燈
  676.                                                 deng=1;
  677.                                                 deng=0;
  678.                                                 TR0=1;//開(kāi)定時(shí)器0,關(guān)定時(shí)器1
  679.                                                 TR1=0;
  680.                                                 num=0;//顯示0
  681.                                                 kaif=1;//搶答開(kāi)始標(biāo)記
  682.                                         }
  683.                                 }
  684.                         }
  685.                         while(kaif==1)//搶答開(kāi)始
  686.                         {
  687.                                 if(daf==0)//未開(kāi)始答題
  688.                                 {
  689.                                         scan();//鍵盤掃描
  690.                                         shuzi(ds,num);//數(shù)碼管顯示
  691.                                 }
  692.                                 else
  693.                                 {
  694.                                         if(daf==1)
  695.                                                 shuzi(s3,num);//答題之前3秒倒計(jì)時(shí)
  696.                                         else
  697.                                                 shuzi(dtds,num);//開(kāi)始答題,答題倒計(jì)時(shí)
  698.                                                 if(!keyjia||!keyjian)
  699.                                                 {
  700.                                                         TR0=0;
  701.                                                         while(keyfw&&keyqc)
  702.                                                         {
  703.                                                                 shuzi(dtds,num);
  704.                                                                 jifen();
  705.                                                                 display();
  706.                                                         }
  707.                                                 }
  708.                                 }
  709.                                 if(keyfw==0)//復(fù)位
  710.                                 {
  711.                                         delay(5);
  712.                                         if(keyfw==0)
  713.                                         {
  714.                                                 while(!keyfw);
  715.                                                 goto LOOP1;//回到初始化子程序
  716.                                         }
  717.                                 }
  718.                                 if(keyqc==0)
  719.                                 {
  720.                                         delay(5);
  721.                                         if(keyqc==0)
  722.                                         {
  723.                                                 while(!keyqc);
  724.                                                 goto LOOP0;
  725.                                         }
  726.                                 }
  727.                         }

  728. }
復(fù)制代碼


加液晶.zip

112.59 KB, 下載次數(shù): 14

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

使用道具 舉報(bào)

沙發(fā)
ID:491412 發(fā)表于 2019-3-25 22:04 | 只看該作者
多提一句,雖然他顯示的是亂碼,但是1和2對(duì)應(yīng)的亂碼,我來(lái)回切換好多次發(fā)現(xiàn)都是不變的,算是。。有規(guī)律的亂碼吧,不知道什么情況,如果是一開(kāi)始就顯示1或者2那沒(méi)問(wèn)題,就是一加減分操作就出問(wèn)題
回復(fù)

使用道具 舉報(bào)

板凳
ID:123289 發(fā)表于 2019-3-27 08:41 | 只看該作者
畫(huà)出邏輯框圖,畫(huà)的時(shí)候或許你就明白了。
回復(fù)

使用道具 舉報(bào)

地板
ID:491412 發(fā)表于 2019-3-27 21:32 | 只看該作者
yzwzfyz 發(fā)表于 2019-3-27 08:41
畫(huà)出邏輯框圖,畫(huà)的時(shí)候或許你就明白了。

我是初學(xué)者,不知道邏輯框圖怎么畫(huà)。。做的時(shí)候腦子其實(shí)一團(tuán)漿糊,全靠仿真找問(wèn)題,算了,還是回頭問(wèn)老師吧。話說(shuō)你也是揚(yáng)州的啊,我是揚(yáng)大的
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲成av| 岛国av在线免费观看 | 国产激情在线观看视频 | 亚洲一区中文字幕 | 国产成人精品a视频一区www | 欧美一区二区视频 | 日韩区| 欧美色影院 | 欧美成年黄网站色视频 | 国产一区二区三区高清 | 国产高清在线精品一区二区三区 | 中国一级大黄大片 | 黄色免费看 | 欧美日韩大片 | 亚洲免费大片 | 欧美6一10sex性hd | 亚洲免费在线观看 | 九一视频在线观看 | 国产精品1区2区3区 欧美 中文字幕 | 欧美一极视频 | www.久久久久久久久久久久 | 精品国产一区二区三区在线观看 | 黄色片在线观看网址 | 亚洲精品久久久久中文字幕二区 | 亚洲综合小视频 | 午夜三级视频 | 亚洲成人av在线播放 | 国产欧美综合在线 | 日韩精品免费看 | 一区二区三区在线观看视频 | 欧美精品一区二区三区四区五区 | 日本在线一区二区三区 | 成人在线一区二区三区 | 国产a级毛片 | av在线播放国产 | 毛片免费看的 | 久久成人精品 | 欧美一区二区三区精品免费 | 成人三级网址 | 国产人免费人成免费视频 | 欧洲亚洲一区二区三区 |