欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: 用51單片機(jī)做的60s倒計(jì)時(shí) C語言與匯編語言程序錯誤 求修改 [打印本頁]

作者: TTao    時(shí)間: 2019-10-9 13:41
標(biāo)題: 用51單片機(jī)做的60s倒計(jì)時(shí) C語言與匯編語言程序錯誤 求修改
十位個(gè)位分開,如下錯誤


單片機(jī)源程序如下:
  1. #include<reg52.h>
  2. #define uint unsigned int
  3. #define uchar unsigned char
  4. uchar code table[]={0xc0,0xf9,0xa4, 0xb0,0x99,
  5. 0x92,0x82,0xf8,0x80,0x90};
  6. sbit gew=P2^1;
  7. sbit shiw=P2^0;
  8. sbit k2=P1^0;
  9. uchar num,num1=60,num2,shi,ge;
  10. void Init()                                                         //初始化子函數(shù)
  11. {
  12.         TMOD=0X01;                                                //設(shè)定定時(shí)器0的工作方式為1
  13.         TH0=(65536-50000)/256;                        //定時(shí)器裝初值一個(gè)周期50ms
  14.         TL0=(65536-50000)%256;
  15.         EA=1;                                                        //開總中斷
  16.         ET0=1;                                                    //開定時(shí)器0中斷
  17.         TR0=1;                                                        //啟動定時(shí)器0

  18. }
  19. void delay(uint xms)                                //延時(shí)子函數(shù)
  20. {
  21.         uint i,j;
  22.         for(i=xms;i>0;i--)
  23.         for(j=110;j>0;j--);
  24. }

  25. void scankey()                                                //鍵盤檢測子函數(shù)
  26. {
  27.         if(k2==0)                                                //檢測鍵是否被按下
  28.         {
  29.                 delay(5);                                        //延時(shí)消除抖動
  30.                 if(k2==0)                                        //重新讀取k2的值
  31.                 {                                                        
  32.                         num2++;                                        //num2為按次數(shù)標(biāo)志位
  33.                         while(!k2);                                //等待按鍵釋放
  34.                         if(num2==1)                                //按鍵一次計(jì)時(shí)停止
  35.                            TR0=0;
  36.                         if(num2==2)                                //按鍵兩次計(jì)時(shí)開始
  37.                         {               
  38.                                   TR0=1;
  39.                         }
  40.                 }
  41.         }
  42. }

  43. void main()                                                         //主函數(shù)
  44. {
  45.         Init();                                                         //初始化子函數(shù)調(diào)用
  46.         while(1)
  47.         {
  48.                 scankey();                                         //不斷鍵盤掃描
  49.                 gew=1;                                                 //打開數(shù)碼管個(gè)位位選                                         
  50.                 P0=table[ge];                                 //數(shù)碼管個(gè)位賦值
  51.                 delay(1);                                         //延時(shí) 送入數(shù)據(jù)的反應(yīng)時(shí)間
  52.                 gew=0;                                                 //關(guān)閉數(shù)碼管個(gè)位位選
  53.                 delay(1);

  54.                 shiw=1;                                                  //打開數(shù)碼管十位位選        
  55.                 P0=table[shi];                                  //送入數(shù)據(jù)
  56.                 delay(1);                                          
  57.                 shiw=0;                                                  //關(guān)閉數(shù)碼管十位位選
  58.                 delay(1);
  59.         }
  60. }
  61. void Timer0()interrupt 1                           
  62. {
  63.         TH0=(65536-50000)/256;                          //定時(shí)器重裝初值
  64.         TL0=(65536-50000)%256;
  65.         num++;
  66.         if(num==20)                                                  //定時(shí)器每進(jìn)行一個(gè)周期num加1,運(yùn)行20個(gè)周期即為1s
  67.         {
  68.                 num=0;                                                  //到1秒,num清0重新開始
  69.                 num1--;                                                  //倒計(jì)時(shí)1秒
  70.                 if(num1==0)
  71.                 num1=60;
  72.                 shi=num1/10;                                  //兩位數(shù)分離賦給數(shù)碼管十位顯示
  73.                 ge=num1%10;                                          //兩位數(shù)分離賦給數(shù)碼管個(gè)位顯示
  74.         }
  75. }
復(fù)制代碼
  1. ORG  0000H
  2. AJMP MAIN
  3. ORG  0030H     

  4. MAIN: MOV R2,#60

  5. LOOP1: MOV A,R2
  6.        MOV B,#10
  7. DIV AB
  8. MOV DPTR,#TABLE
  9. MOVC A,@A+DPTR
  10. MOV P1,A
  11. MOV A,B  
  12. MOV DPTR,#TABLE1
  13. MOVC A,@A+DPTR
  14. MOV P2,A

  15. MOV R7,#20  

  16. LOOP0: MOV TMOD,#01H
  17. MOV TH0,#3CH
  18. MOV TL0,#0B0H
  19. SETB TR0
  20. JNB TF0,$
  21. CLR TF0
  22. DJNZ R7,LOOP0
  23. DEC R2      
  24. CJNE R2,#0FFH,LOOP1
  25. AJMP MAIN


  26. TABLE1:DB 0C0H,0F9H,0A4H,0B0H
  27. DB 099H,092H,082H,0F8H
  28. DB 080H,090H  
  29. TABLE:DB 03FH,06H,05BH,04FH
  30. DB 066H,06DH,07DH,07H
  31. DB 07FH,06FH

  32. END
復(fù)制代碼


所有資料51hei提供下載:
60s倒計(jì)時(shí)課設(shè).zip (39.14 KB, 下載次數(shù): 5)







歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1