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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

新人請教仿真一個數碼管電子鐘問題 把P0的位置和h=b[g],h=c[g]的位置換一下就不行了

[復制鏈接]
跳轉到指定樓層
樓主
仿真一個數碼管電子鐘,問題在代碼后面。代碼和原理圖如下:
  1. #include<reg51.h>//頭文件
  2. #define uchar unsigned char//宏定義
  3. #define uint unsigned int
  4. sbit s1=P1^0;
  5. sbit s2=P1^1;
  6. sbit s3=P1^2;//按鍵123
  7. sbit fmq=P3^6;
  8. sbit fmqkg=P3^7;
  9. uint nian=2015,yue=5,ri=26;//初始化定義2015年5月26日
  10. signed char shi=16,fen=5,miao=0,xingqi=2,ns=7,nf=30,nm=0;//時分秒23-59-50,星期2,鬧時分秒7:30:00
  11. uchar qiehuan=0,shanshuo=0,tiaojie=0,jishi=0,jishu=0,c[8]; //切換,閃爍,調節,計時,計數。
  12. uchar code a[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xbf,0xff};//0-9“-”“不顯示”
  13. uchar code b[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};//P2打開次序
  14. void yanshi(uchar d) //延時
  15. {        
  16.         uchar e,f;
  17.         for(e=d;e>0;e--)
  18.         for(f=120;f>0;f--);
  19. }
  20. void shijianxianshi() //時間顯示
  21. {
  22.         uchar g,h;
  23.         for(g=0;g<8;g++)
  24.         {
  25.                 P2=0; //關P2,不關也沒事。關了放心點。
  26.                 h=c[g];               
  27.                 P0=a[h];
  28.                 h=b[g];
  29.                 if(shanshuo)
  30.                 {
  31.                         if(tiaojie==1&(g==0|g==1))h=0; //若調節等于1,秒閃爍
  32.                         if(tiaojie==2&(g==3|g==4))h=0;//若調節等于2,分閃爍
  33.                         if(tiaojie==3&(g==7|g==6))h=0; //若調節等于3,時閃爍
  34.                 }
  35.                 P2=h;
  36.                 yanshi(5);
  37.                 P2=0; //消影
  38.         }
  39.         c[7]=shi/10; //分離時分秒
  40.         c[6]=shi%10;
  41.         c[5]=10; //“顯示-”
  42.         c[4]=fen/10;
  43.         c[3]=fen%10;
  44.         c[2]=10;
  45.         c[1]=miao/10;
  46.         c[0]=miao%10;
  47.         if(shi<10)c[7]=11;//若小時小于10,0不顯示。
  48. }
  49. void riqixianshi()         //日期        顯示
  50. {
  51.         uchar i,j;
  52.         for(i=0;i<8;i++)
  53.         {
  54.                 P2=0;
  55.                 j=c[ i];
  56.                 P0=a[j];
  57.                 j=b[ i];
  58.                 if(shanshuo)//調節時對應的位置閃爍
  59.                 {
  60.                         if(tiaojie==4&(i==0|i==1))j=0;                //日
  61.                         if(tiaojie==5&(i==2|i==3))j=0;                //月
  62.                         if(tiaojie==6&(i==7|i==6|i==5|i==4))j=0;//年閃爍
  63.                 }
  64.                 P2=j;
  65.                 yanshi(5);
  66.                 P2=0;
  67.         }
  68.         c[7]=nian/1000%10;
  69.         c[6]=nian/100%10;
  70.         c[5]=nian/10%10;
  71.         c[4]=nian%10;
  72.         c[3]=yue/10;
  73.         c[2]=yue%10;
  74.         c[1]=ri/10;
  75.         c[0]=ri%10;
  76. }
  77. void xingqixianshi() //星期顯示
  78. {
  79.         P2=0x40;  //01000000
  80.         P0=0X3F;  //00111111 顯示“.”“-”
  81.         yanshi(5);
  82.         P2=0;
  83.         P2=0x20;   //00100000
  84.         P0=a[xingqi];  //星期顯示位置
  85.         yanshi(5);
  86.         P2=0;
  87.         P2=0x10;         //00010000
  88.         P0=0XbF;        // 顯示“-”
  89.         yanshi(5);
  90.         P2=0;
  91.         P2=0x08;         //00001000
  92.         P0=0X7F;         //顯示“.”
  93.         yanshi(5);
  94.         P2=0;
  95. }
  96. void fengmingqi() //蜂鳴器
  97. {
  98.         if(fen==0&&miao==0)//整點報時
  99.         fmq=0;                                 //報時1秒
  100.         if(fen!=0||miao!=0)//1秒過后
  101.         fmq=1;                           //關蜂鳴器
  102.         if(shi==ns&&fen==nf) //鬧鐘1分鐘
  103.         fmq=0;
  104.         if(shi!=ns||fen!=nf) //1分鐘過后
  105.         fmq=1;                                //關蜂鳴器
  106. }
  107. void naozhongxianshi() //鬧鐘顯示
  108. {
  109.         uchar k,l;
  110.         for(k=0;k<8;k++)
  111.         {
  112.                 P2=0;
  113.                 l=c[k];
  114.                 P0=a[l];
  115.                 l=b[k];
  116.                 if(shanshuo)
  117.                 {                                 
  118.                         if(tiaojie==7&(k==3|k==4))l=0;
  119.                         if(tiaojie==8&(k==7|k==6))l=0;
  120.                 }
  121.                 P2=l;
  122.                 yanshi(5);
  123.                 P2=0;
  124.         }
  125.         c[7]=ns/10;
  126.         c[6]=ns%10;
  127.         c[5]=10;
  128.         c[4]=nf/10;
  129.         c[3]=nf%10;
  130.         c[2]=10;
  131.         c[1]=nm/10;
  132.         c[0]=nm%10;
  133.         if(shi<10)c[7]=11;
  134. }
  135. void anjian()
  136. {         
  137.         if(s1==0)//若S1按下
  138.         {
  139.                 yanshi(10);         //延時
  140.                 if(s1==0)          //確認按下
  141.                 {
  142.                         while(!s1);        //等待放開
  143.                         tiaojie++;
  144.                         TR0=0;           //關定時器0
  145.                         TR1=1;           //開定時器1
  146.                         if(tiaojie==11)        //若調節到了11
  147.                         {
  148.                                 tiaojie=0; //置零
  149.                                 TR1=0;        //關計時器1;
  150.                                 TR0=1;        //開計時器0
  151.                         }
  152.                 }
  153.         }
  154. /*        if(s2==0)
  155.         {
  156.                 while(!s2);
  157.                 switch(tiaojie)
  158.                 {
  159.                         case 1:qiehuan=0;miao++;if(miao==60)miao=0;break;
  160.                         case 2:qiehuan=0;fen++;if(fen==60)fen=0;break;
  161.                         case 3:qiehuan=0;shi++;if(shi==24)shi=0;break;
  162.                         case 4:qiehuan=1;ri++;if(yue==2&&(nian%4==0)&&ri==30)ri=1;  //年能整除4的2月,29天。
  163.                                                                         else if(yue==2&&ri==29)ri=1; //其他的2月28天
  164.                                                                         else if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;        //小月30天
  165.                                                                         else if(ri==32)ri=1;break;  //其他的31天
  166.                         case 5:qiehuan=1;yue++;if(yue==13)yue=1;break;
  167.                         case 6:qiehuan=1;nian++;if(nian==10000)nian=0;break;
  168.                         case 7:qiehuan=3;nf++;if(nf==60)nf=0;break;
  169.                         case 8:qiehuan=3;ns++;if(ns==24)ns=0;break;
  170.                         case 9:qiehuan=2;xingqi++;if(xingqi==8)xingqi=1;break;
  171.                         case 10:fmqkg=0;break;
  172.                         default:qiehuan=0;                                
  173.                 }
  174.         }
  175.         if(s3==0)
  176.         {
  177.                 while(!s3);
  178.                 switch(tiaojie)
  179.                 {
  180.                         case 1:qiehuan=0;miao--;if(miao==-1)miao=59;break;
  181.                         case 2:qiehuan=0;fen--;if(fen==-1)fen=59;break;
  182.                         case 3:qiehuan=0;shi--;if(shi==-1)shi=23;break;
  183.                         case 4:qiehuan=1;ri--;if(yue==2&&(nian%4==0)&&ri==0)ri=30;  //年能整除4的2月,29天。
  184.                                                                         else if(yue==2&&ri==0)ri=29; //其他的2月28天
  185.                                                                         else if((yue==4||yue==6||yue==9||yue==11)&&ri==0)ri=31;        //小月30天
  186.                                                                         else if(ri==0)ri=31;break;  //其他的31天
  187.                         case 5:qiehuan=1;yue--;if(yue==0)yue=12;break;
  188.                         case 6:qiehuan=1;nian--;if(nian==10000)nian=9999;break;
  189.                         case 7:qiehuan=3;nf--;if(nf==-1)nf=59;break;
  190.                         case 8:qiehuan=3;ns++;if(ns==-1)ns=23;break;
  191.                         case 9:qiehuan=2;xingqi--;if(xingqi==0)xingqi=7;break;
  192.                         case 10:fmqkg=0;break;                        
  193.                 }
  194.         }*/
  195.         if(tiaojie==1)        //調秒
  196.         {
  197.                 qiehuan=0;
  198.                 if(s2==0)
  199.                 {                                
  200.                         while(!s2);
  201.                         miao++;
  202.                         if(miao==60)miao=0;
  203.                 }
  204.                 if(s3==0)
  205.                 {                                 
  206.                         while(!s3);
  207.                         miao--;
  208.                         if(miao==-1)miao=59;
  209.                 }
  210.         }
  211.         if(tiaojie==2) //調分
  212.         {
  213.                 qiehuan=0;
  214.                 if(s2==0)
  215.                 {
  216.                         while(!s2);
  217.                         fen++;
  218.                         if(fen==60)fen=0;
  219.                 }
  220.                 if(s3==0)
  221.                 {
  222.                         while(!s3);
  223.                         fen--;
  224.                         if(fen==-1)fen=59;
  225.                 }
  226.         }
  227.         if(tiaojie==3)        //調時
  228.         {
  229.                 qiehuan=0;
  230.                 if(s2==0)
  231.                 {
  232.                         while(!s2);
  233.                         shi++;
  234.                         if(shi==24)shi=0;
  235.                 }
  236.                 if(s3==0)
  237.                 {
  238.                         while(!s3);
  239.                         shi--;
  240.                         if(shi==-1)shi=23;
  241.                 }
  242.         }
  243.         if(tiaojie==4)//調日
  244.         {
  245.                 qiehuan=1;
  246.                 if(s2==0)
  247.                 {                                
  248.                         while(!s2);
  249.                         ri++;                        
  250.                         if(yue==2&&(nian%4==0)&&ri==30)ri=1;  //年能整除4的2月,29天。
  251.                         else if(yue==2&&ri==29)ri=1; //其他的2月28天
  252.                         else if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;        //小月30天
  253.                         else if(ri==32)ri=1;  //其他的31天
  254.                 }
  255.                 if(s3==0)
  256.                 {                                 
  257.                         while(!s3);
  258.                         ri--;
  259.                         if(yue==2&&(nian%4==0)&&ri==0)ri=30;
  260.                         else if(yue==2&&ri==0)ri=29;
  261.                         else if((yue==4||yue==6||yue==9||yue==11)&&ri==0)ri=31;
  262.                         else if(ri==0)ri=31;
  263.                 }
  264.         }
  265.         if(tiaojie==5) //調月
  266.         {
  267.                 qiehuan=1;
  268.                 if(s2==0)
  269.                 {
  270.                         while(!s2);
  271.                         yue++;
  272.                         if(yue==13)yue=1;
  273.                 }
  274.                 if(s3==0)
  275.                 {
  276.                         while(!s3);
  277.                         yue--;
  278.                         if(yue==0)yue=12;
  279.                 }
  280.         }
  281.         if(tiaojie==6) //調年
  282.         {
  283.                 qiehuan=1;
  284.                 if(s2==0)
  285.                 {
  286.                         while(!s2);
  287.                         nian++;
  288.                         if(nian==10000)nian=0;
  289.                 }
  290.                 if(s3==0)
  291.                 {
  292.                         while(!s3);
  293.                         nian--;
  294.                         if(nian==10000)shi=9999;
  295.                 }
  296.         }        
  297.         if(tiaojie==7)//調鬧鐘分
  298.         {
  299.                 qiehuan=3;
  300.                 if(s2==0)
  301.                 {
  302.                         while(!s2);
  303.                         nf++;
  304.                         if(nf==60)nf=0;
  305.                 }
  306.                 if(s3==0)
  307.                 {
  308.                         while(!s3);
  309.                         nf--;
  310.                         if(nf==-1)nf=59;
  311.                 }
  312.         }
  313.         if(tiaojie==8)//調鬧鐘時
  314.         {
  315.                 qiehuan=3;
  316.                 if(s2==0)
  317.                 {
  318.                         while(!s2);
  319.                         ns++;
  320.                         if(ns==24)ns=0;
  321.                 }
  322.                 if(s3==0)
  323.                 {
  324.                         while(!s3);
  325.                         ns--;
  326.                         if(ns==-1)ns=23;
  327.                 }
  328.         }
  329.         if(tiaojie==9)//調星期
  330.         {
  331.                 qiehuan=2;
  332.                 if(s2==0)
  333.                 {
  334.                         while(!s2);
  335.                         xingqi++;
  336.                         if(xingqi==8)xingqi=1;
  337.                 }
  338.                 if(s3==0)
  339.                 {
  340.                         while(!s3);
  341.                         xingqi--;
  342.                         if(xingqi==0)xingqi=7;
  343.                 }
  344.         }
  345.         if(tiaojie==10)//開關蜂鳴器
  346.         {
  347.                 if(s2==0)
  348.                 {
  349.                         while(!s2);
  350.                         fmqkg=0;                        
  351.                 }
  352.                 if(s3==0)
  353.                 {
  354.                         while(!s3);
  355.                         fmqkg=1;                        
  356.                 }
  357.         }
  358. }
  359. void main()
  360. {
  361.         TMOD=0X01;         //中斷器
  362.         TH0=(65535-49990)/256;
  363.         TL0=(65535-49990)%256;
  364.         ET0=1;
  365.         TR0=1;
  366.         EA=1;
  367.         TH1=(65535-49990)/256;
  368.         TL1=(65535-49990)%256;
  369.         ET1=1;
  370.         TR1=0;
  371.         while(1)
  372.         {        
  373.                 anjian();
  374.                 fengmingqi();
  375.                 if(qiehuan==0)
  376.                 shijianxianshi();
  377.                 if(qiehuan==1)
  378.                 riqixianshi();
  379.                 if(qiehuan==2)
  380.                 xingqixianshi();
  381.                 if(qiehuan==3)
  382.                 naozhongxianshi();
  383.         }
  384. }
  385. void dingshiqi1()interrupt 1
  386. {
  387.         TH0=(65535-49990)/256;
  388.         TL0=(65535-49990)%256;
  389.         jishi++;
  390.         if(jishi==20)
  391.         {
  392.                 jishi=0;
  393.                 miao++;
  394.                 if(miao>29&&miao<36)qiehuan=2;        //5秒顯示星期
  395.                 if(miao>35&&miao<45)qiehuan=1; //9秒顯示日期
  396.                 if(miao>44||miao<30)qiehuan=0; //其他的時間全顯示時間
  397.                 if(miao==60)
  398.                 {
  399.                         miao=0;
  400.                         fen++;
  401.                         if(fen==60)
  402.                         {
  403.                                 fen=0;
  404.                                 shi++;
  405.                                 if(shi==24)
  406.                                 {
  407.                                         shi=0;
  408.                                         xingqi++;
  409.                                         if(xingqi==8)xingqi=1;
  410.                                         ri++;
  411.                                         if(yue==2&&(nian%4==0)&&ri==30)ri=1;
  412.                                     else if(yue==2&&ri==29)ri=1;
  413.                                     else if((yue==4||yue==6||yue==9||yue==11)&&ri==31)ri=1;        
  414.                                     else if(ri==32)ri=1;  
  415.                                         if(ri==1)
  416.                                         {
  417.                                                 yue++;
  418.                                                 if(yue==13)
  419.                                                 {
  420.                                                         yue=1;
  421.                                                         nian++;
  422.                                                         if(nian==10000)//沒地方顯示了,不然長整型非得弄成幾億年。
  423.                                                         nian=0;        //想多了,人生百年雖然短了點,但是也可以了。
  424.                                                 }
  425.                                         }
  426.                                 }
  427.                         }
  428.                 }
  429.         }        
  430. }
  431. void dingshiqi2()interrupt 3
  432. {
  433.         TH1=(65535-49990)/256;
  434.         TL1=(65535-49990)%256;
  435.         jishu++;
  436.         if(jishu==40)
  437.         {
  438.                 jishu=0;
  439.                 shanshuo=shanshuo^0xff;
  440.         }
  441. }
復制代碼


為什么我把P0的位置和h=b[g],h=c[g]的位置換一下就不行了呢?

原理圖.png (23.19 KB, 下載次數: 125)

原理圖.png

換了P0=a[h]位置.png (23.15 KB, 下載次數: 134)

換了P0=a[h]位置.png

換了P0=a[h]位置1.png (22.66 KB, 下載次數: 127)

換了P0=a[h]位置1.png

換了h=b[g]位置.png (23.12 KB, 下載次數: 160)

換了h=b[g]位置.png

換了h=b[g]位置1.png (22.21 KB, 下載次數: 166)

換了h=b[g]位置1.png

換了h=b[g]位置3.png (22.76 KB, 下載次數: 138)

換了h=b[g]位置3.png

換了h=b[g]位置3-2.png (20.57 KB, 下載次數: 139)

換了h=b[g]位置3-2.png

數碼管.zip

88.88 KB, 下載次數: 9

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

使用道具 舉報

沙發
ID:79034 發表于 2015-5-31 01:17 | 只看該作者
有人能幫我解釋下嗎?
回復

使用道具 舉報

板凳
ID:81118 發表于 2015-6-6 18:20 | 只看該作者
仿真的東西,說不清道不明!
回復

使用道具 舉報

地板
ID:1 發表于 2015-6-9 01:48 | 只看該作者
h=b[g],h=c[g]是兩句相鄰的語句,他們的順序不會影響到程序的執行結果,樓主是不是復制的時候輸入了一些 全角的空格或者字符?
回復

使用道具 舉報

5#
ID:79034 發表于 2015-6-12 20:16 | 只看該作者
admin 發表于 2015-6-9 01:48
h=b[g],h=c[g]是兩句相鄰的語句,他們的順序不會影響到程序的執行結果,樓主是不是復制的時候輸入了一些 全 ...

沒有啊,都是自己打的,換位置的時候才是復制的。不過仿真確實可能有問題。
我做個實物實驗一下。謝謝。。。。

評分

參與人數 1黑幣 +35 收起 理由
admin + 35 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区免费视频 | 亚洲一区 中文字幕 | 亚洲伦理自拍 | 中文成人在线 | 国产成人99久久亚洲综合精品 | 成人高清在线 | 久久久久国产一级毛片 | 18性欧美 | 免费三级av | 欧美日韩在线视频一区 | 国产亚洲欧美日韩精品一区二区三区 | 鲁大师一区影视 | 精品久久电影 | 狠狠干天天干 | 四虎影视免费观看 | 精品国产一区二区三区久久久蜜月 | 久久精品欧美一区二区三区不卡 | 久久亚洲综合 | 天天拍天天色 | 久草精品视频 | 91精品国产综合久久久久 | 欧美午夜在线 | 欧美国产一区二区 | 一区二区不卡高清 | 日日操视频 | 成人免费看片网 | 亚洲精品电影网在线观看 | www.v888av.com| 丁香五月网久久综合 | 中文字幕一二三区 | 国产在线资源 | 国产精品久久久久久av公交车 | 日韩a v在线免费观看 | 黄视频免费在线 | 暴草美女 | 国产资源在线观看 | 国产一在线观看 | 在线欧美| 国产在线观看一区二区三区 | 99精品视频网 | 黄色免费三级 |