KA_IX

  • 2641 主题
  • 2690 帖子
  • 6776 积分
  • 身份:LV6 初级工程师
  • 论坛新秀 灌水之王 突出贡献
  • E币:1940

51单片机应用的常用代码

2021-4-13 17:27:00 显示全部楼层

51单片机实验板原理图 83c34643e48d44b8aef51199df6efe19?from=pc.jpg

1.流水灯实验
eb7fefeef77f49d98e311bd73db48991?from=pc.jpg
  1. #include <REG52.h>                        
  2. void delay(unsigned int Cnt)
  3. {
  4.         unsigned int t;
  5.         while(Cnt--)                       
  6.         {                       
  7.                 t = 120;
  8.                 while(t--);
  9.         }       
  10. }
  11. void main( )                                        /*主程序*/
  12. {       
  13. P1=0xfe;       
  14.         delay( 400 ); /*500为延时参数,可根据实际需要调整*/
  15.         P1=0xfd;       
  16.         delay( 500 );
  17.         P1=0xfb;       
  18.         delay( 500 );
  19.         P1=0xf7;       
  20.         delay( 500 );
  21.         P1=0xef;       
  22.         delay( 500 );
  23.         P1=0xdf;       
  24.         delay( 500 );
  25.         P1=0xbf;       
  26.         delay( 500 );
  27.         P1=0x7f;       
  28.         delay( 500 );
  29. }


2.数码管动态显示 3ed8a7ac1b404bc4b0dabf35b7df14be?from=pc.jpg
  1. #include<reg52.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit duan=P2^6;
  6. sbit wei=P2^7;
  7. uchar code tab[18]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
  8. 0x6f,0x77,0x7c,0x39,0x5e,0x79,0x00,0x40}; //
  9. uchar idata dis_buf[6]={17,17,17,17,17,17}; //
  10. void delayms(uint i)
  11. {
  12. uint j;
  13. for(;i>0;i--)
  14. for(j=120;j>0;j--)
  15. {;}
  16. }
  17. void main()
  18. {
  19. uchar k,m,n,bitcode,segcode;
  20. while(1)
  21. {
  22. for(n=0;n<17;n++)
  23. {
  24. dis_buf[0]=dis_buf[1];
  25. dis_buf[1]=dis_buf[2];
  26. dis_buf[2]=dis_buf[3];
  27. dis_buf[3]=dis_buf[4];
  28. dis_buf[4]=dis_buf[5];
  29. dis_buf[5]=n;
  30. for(m=0;m<100;m++)
  31. {
  32. bitcode=0xfe;
  33. for(k=0;k<6;k++)
  34. {
  35. P0=0xff;
  36. wei=1;
  37. wei=0;
  38. segcode=dis_buf[k];
  39. P0=tab[segcode];
  40. duan=1;
  41. duan=0;
  42. P0=bitcode;
  43. wei=1;
  44. wei=0;
  45. delayms(1);
  46. bitcode=_crol_(bitcode,1);
  47. }
  48. }
  49. }
  50. }
  51. }


3.数码管静态显示 f3eee8371255460d8e4a7441714d268f?from=pc.jpg
  1. #include <reg51.h>                                
  2. #define uchar unsigned char                                        
  3. #define uint unsigned int                                        
  4. sbit DUAN=P2^6;
  5. sbit WEI=P2^7;
  6. uchar code led[6]=
  7. {0x00,0x01,0x02,0x03,0x04,0x05};
  8. uchar data ledwei[]=
  9. {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  10. uchar data displaytab[6]=
  11. { 0x06, 0x5b ,0x4f ,0x66 ,0x6d ,0x7d };
  12. void delay()                                                  
  13. {        uchar x,y;
  14.         for(x=2; x>0; x--)
  15.         for(y=250; y>0; y--);               
  16. }
  17. void main( )                                                
  18. {
  19.         uchar i;
  20.         while(1)
  21.         {
  22.                 for (i=0;i<6;i++)
  23.                         {       
  24.                                 P0=displaytab[led[i]];
  25.                                 DUAN=1;
  26.                                 DUAN=0;               
  27.                
  28.                                 P0=ledwei[i];
  29.                                 WEI = 1;
  30.                                 WEI = 0;                       
  31.                
  32.                                 delay();       
  33.                                 P0=0x00;                                               
  34.                                 DUAN = 1;
  35.                                 DUAN = 0;
  36.                         }       
  37.          }
  38. }


4.数码管显示相同的内容 d12287a38e624ad7ae80f637fdc27af1?from=pc.jpg
  1. #include <reg51.h>                                
  2. #define uchar unsigned char                                        
  3. #define uint unsigned int                                        
  4. sbit DUAN=P2^6;
  5. sbit WEI=P2^7;
  6. uchar code led[6]=
  7. {0x00,0x01,0x02,0x03,0x04,0x05};
  8. uchar data ledwei[]=
  9. {0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  10. uchar data displaytab[6]=
  11. { 0x06, 0x5b ,0x4f ,0x66 ,0x6d ,0x7d };
  12. void delay()                                                  
  13. {        uchar x,y;
  14.         for(x=2; x>0; x--)
  15.         for(y=250; y>0; y--);               
  16. }
  17. void main( )                                                
  18. {
  19.         uchar i;
  20.         while(1)
  21.         {
  22.                 for (i=0;i<6;i++)
  23.                         {       
  24.                                 P0=displaytab[led[i]];
  25.                                 DUAN=1;
  26.                                 DUAN=0;               
  27.                
  28.                                 P0=ledwei[i];
  29.                                 WEI = 1;
  30.                                 WEI = 0;                       
  31.                
  32.                                 delay();       
  33.                                 P0=0x00;                                               
  34.                                 DUAN = 1;
  35.                                 DUAN = 0;
  36.                         }       
  37.          }
  38. }


5.脉冲计数 c39a0a29e19847d3a3e15fbd341619e2?from=pc.jpg
  1. #include <reg51.h>                                
  2. #define uchar unsigned char                                        
  3. #define uint unsigned int                                        
  4. sbit DUAN=P2^6;
  5. sbit WEI=P2^7;
  6. sbit K1=P3^4;
  7. sbit K2=P3^5;
  8. sbit K3=P3^6;
  9. sbit K4=P3^7;
  10. uint q=9999;
  11. uchar data led[6]={9,9,9,9,0,0};
  12. uchar data ledwei[6]={0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  13. uchar data displaytab[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  14. void delay()                                                  /*延时函数,约1mS*/
  15. {        uchar x,y;
  16.         for(x=2; x>0; x--)
  17.         for(y=250; y>0; y--);               
  18. }
  19. void display()                                                         /*主程序*/
  20. {
  21.         uchar i;
  22.                 for (i=0;i<6;i++)
  23.                         {       
  24.                                 P0=displaytab[led[i]];
  25.                                 DUAN=1;
  26.                                 DUAN=0;               
  27.                
  28.                                 P0=ledwei[i];
  29.                                 WEI = 1;
  30.                                 WEI = 0;                       
  31.                
  32.                                 delay();
  33.                          P0=0xff;                                                /*消影2,位选全部关断*/
  34.                          WEI = 1;
  35.                                 WEI = 0;
  36.                                 P0=0x00;                                                /*消影1,熄灭断码*/
  37.                                 DUAN = 1;
  38.                                 DUAN = 0;
  39.                         }       
  40.          }
  41. void main()
  42. {
  43. TMOD=0x06;
  44. EA=1;
  45.         ET0=1;
  46.         ET1=1;
  47.         TH0=0xff;
  48.         TL0=0xff;
  49.         TH1=0xff;
  50.         TL1=0xff;
  51.         TR0=1;
  52.         TR1=1;
  53.         PT0=1;
  54. while(1)
  55. {
  56. display();
  57. }
  58. }
  59. void T0_int() interrupt 1
  60. {
  61. display();
  62. display();
  63. if(K1==0)
  64. {                               
  65. q++;
  66. led[5]=q/100000;
  67. led[4]=q%100000/10000;
  68. led[3]=q%10000/1000;
  69. led[2]=q%1000/100;
  70. led[1]=q%100/10;
  71. led[0]=q%10/1;
  72. }
  73. top:while(!K1)
  74. {
  75. display();
  76. }
  77. display();
  78. display();
  79. while(!K1)
  80. {
  81. goto top;
  82. }
  83. }
  84. void T1_int() interrupt 3
  85. {
  86. display();
  87. display();
  88. if(K2==0)
  89. {                               
  90. q--;
  91. led[5]=q/100000;
  92. led[4]=q%100000/10000;
  93. led[3]=q%10000/1000;
  94. led[2]=q%1000/100;
  95. led[1]=q%100/10;
  96. led[0]=q%10/1;
  97. }
  98. top:while(!K2)
  99. {
  100. display();
  101. }
  102. display();
  103. display();
  104. while(!K2)
  105. {
  106. goto top;
  107. }
  108. }


6.脉冲测量 8501366f999643a9a1681a83dfb5b933?from=pc.jpg
  1. #include <reg51.h>                                
  2. #define uchar unsigned char                                        
  3. #define uint unsigned int                                        
  4. sbit DUAN=P2^6;
  5. sbit WEI=P2^7;
  6. sbit K1=P3^4;
  7. sbit K2=P3^5;
  8. sbit pulse=P3^3;
  9. uchar count_high;
  10. uchar count_low;
  11. uint num;
  12. uchar data led[6]=
  13. {0,0,0,0,0,0};
  14. uchar data ledwei[6]=
  15. {0xdf,0xef,0xf7,0xfb,0xfd,0xfe};
  16. uchar data displaytab[16]=
  17. {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
  18. void delay()                                                  /*延时函数,约1mS*/
  19. {        uchar x,y;
  20.         for(x=2; x>0; x--)
  21.         for(y=250; y>0; y--);               
  22. }
  23. void read_count()
  24. {
  25. count_high=TH1;
  26. count_low=TL1;
  27. num=count_high*256+count_low;
  28. }
  29. void display()                                                         /*主程序*/
  30. {
  31.         uchar i;
  32.                 for (i=0;i<6;i++)
  33.                         {       
  34.                                 P0=displaytab[led[i]];
  35.                                 DUAN=1;
  36.                                 DUAN=0;               
  37.                
  38.                                 P0=ledwei[i];
  39.                                 WEI = 1;
  40.                                 WEI = 0;                       
  41.                
  42.                                 delay();
  43.                                 P0=0xff;                                                /*消影2,位选全部关断*/
  44.                                 WEI = 1;
  45.                                 WEI = 0;
  46.                                 P0=0x00;                                                /*消影1,熄灭断码*/
  47.                                 DUAN = 1;
  48.                                 DUAN = 0;
  49.                         }       
  50.          }
  51. void main()
  52. {
  53. TMOD=0x06;
  54. EA=1;
  55. ET0=1;
  56. TR0=1;
  57. TH0=0xff;
  58. TL0=0xff;
  59. while(1)
  60. {
  61. display();
  62. }
  63. }
  64. void T0_int() interrupt 1
  65. {
  66. display();
  67. display();
  68. if(K1==0)
  69. {       
  70. TMOD=0X90;                       
  71. while(pulse==1);
  72. TR1=1;
  73. while(pulse==0);
  74. while(pulse==1);
  75. TR1=0;
  76. read_count();
  77. led[5]=num/100000;
  78. led[4]=num%100000/10000;
  79. led[3]=num%10000/1000;
  80. led[2]=num%1000/100;
  81. led[1]=num%100/10;
  82. led[0]=num%10/1;
  83. }
  84. top:while(!K1)
  85. {
  86. display();
  87. }
  88. display();
  89. display();
  90. while(!K1)
  91. {
  92. goto top;
  93. }
  94. }



您需要登录后才可以评论 登录 | 立即注册

最新评论

楼层直达:
快速回复
0
0
广告
关闭 热点推荐上一条 /4 下一条
快速回复 返回列表