找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 143|回复: 0
打印 上一主题 下一主题
收起左侧

单片机流水灯试验程序

[复制链接]
跳转到指定楼层
楼主


  1. #include <REGX51.H>
  2. #include <intrins.h>
  3. unsigned char code table[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
  4. unsigned char code wei[]={0XF7,0XFB,0XFD,0XFE};
  5. sbit K1=P3^3;
  6. sbit K2=P3^4;
  7. sbit K3=P3^5;
  8. sbit K4=P3^6;
  9. sbit K5=P2^7;
  10. sbit K6=P2^4;
  11. sbit K7=P2^5;
  12. sbit K8=P2^6;
  13. void key();
  14. void seg_display_buffer(char *buffer);
  15. void Delay(unsigned int xms);
  16. bit interrupt_flag = 0;
  17. unsigned char i;
  18. #define LED_PORT P1
  19. #define SEG_PORT P2
  20. char display_bufer[]={0,0,0,0};
  21. void Delay500ms();
  22. bit flag1 = 0, flag2 = 0, flag3 = 0;
  23. void main()
  24. {
  25.         IT0 = 1; // 边沿触发
  26.     EX0 = 1; // 允许INT0中断
  27.     EA = 1;  // 开总中断
  28.         while(1)
  29.         {
  30.                 seg_display_buffer(display_bufer);
  31.                 key();
  32.                 {
  33.         if(!interrupt_flag) {
  34.             LED_PORT = 0xFE;
  35.             Delay500ms();
  36.             for( i=0; i<7; i++) {
  37.                 LED_PORT = _crol_(LED_PORT, 1);
  38.                 Delay500ms();
  39.             }
  40.         }
  41.     }
  42.         }
  43. }
  44.         void seg_display_buffer(char *buffer)
  45.         {

  46.                 int i,j;
  47.                 for(i=0;i<=3;i++)
  48.                 {
  49.                 P0=table[buffer[i]];
  50.                 P2=wei[i];
  51.                 for(j=0;j<20;j++);
  52.                 P2=0XFF;
  53.                 for(j=0;j<10;j++);
  54.                 }       
  55.         }
  56. void Delay(unsigned int ms)                //@12.000MHz
  57. {
  58.         unsigned char i, j;
  59.         for(i=0;i<ms;i++);
  60.         for(j=0;j<810;j++);
  61. }
  62. void INT0_ISR() interrupt 0 {
  63.     interrupt_flag = 1;
  64.     SEG_PORT=0000;
  65.         LED_PORT=0000;
  66.     Delay500ms();    // 消抖
  67. }
  68. void key()
  69. {
  70.         if(!K1)
  71.         {       
  72.                 Delay500ms();
  73.                 while(!K1);
  74.                 Delay500ms();
  75.                 display_bufer[3]=1;
  76.                 display_bufer[2]=1;
  77.                 display_bufer[1]=1;
  78.                 display_bufer[0]=1;
  79.                 LED_PORT=0xFE;
  80.                 Delay500ms();
  81.         }
  82.                 if(!K2)
  83.         {       
  84.                 Delay500ms();
  85.                 while(!K2);
  86.         Delay500ms();
  87.                 display_bufer[3]=2;
  88.                 display_bufer[2]=2;
  89.                 display_bufer[1]=2;
  90.                 display_bufer[0]=2;
  91.                 LED_PORT=0xFD;
  92.                 Delay500ms();
  93.         }
  94.         if(!K3)
  95.         {
  96.                 Delay500ms();
  97.                 while(!K3);
  98.                 Delay500ms();
  99.                 display_bufer[3]=3;
  100.                 display_bufer[2]=3;
  101.                 display_bufer[1]=3;
  102.                 display_bufer[0]=3;
  103.                 LED_PORT=0xFB;
  104.                 Delay500ms();
  105.         }
  106.         if(!K4)
  107.         {
  108.                 Delay500ms();
  109.                 while(!K4);
  110.                 Delay500ms();
  111.                 display_bufer[3]=4;
  112.                 display_bufer[2]=4;
  113.                 display_bufer[1]=4;
  114.                 display_bufer[0]=4;
  115.                 LED_PORT=0xF7;
  116.                 Delay500ms();
  117.         }
  118.         if(!K5)
  119.         {
  120.                 Delay500ms();
  121.                 while(!K5);
  122.                 Delay500ms();
  123.                 display_bufer[3]=5;
  124.                 display_bufer[2]=5;
  125.                 display_bufer[1]=5;
  126.                 display_bufer[0]=5;
  127.                 LED_PORT=0xEF;
  128.                 Delay500ms();
  129.         }
  130.         if(!K6)
  131.         {
  132.                 Delay500ms();
  133.                 while(!K6);
  134.                 Delay500ms();
  135.                 display_bufer[3]=6;
  136.                 display_bufer[2]=6;
  137.                 display_bufer[1]=6;
  138.                 display_bufer[0]=6;
  139.                 LED_PORT=0xDF;
  140.                 Delay500ms();
  141.         }
  142.         if(!K7)
  143.         {
  144.                 Delay500ms();
  145.                 while(!K7);
  146.                 Delay500ms();
  147.                 display_bufer[3]=7;
  148.                 display_bufer[2]=7;
  149.                 display_bufer[1]=7;
  150.                 display_bufer[0]=7;
  151.                 LED_PORT=0xBF;
  152.                 Delay500ms();
  153.         }
  154.         if(!K8)
  155.         {
  156.                 Delay500ms();
  157.                 while(!K8);
  158.                 Delay500ms();
  159.                 display_bufer[3]=8;
  160.                 display_bufer[2]=8;
  161.                 display_bufer[1]=8;
  162.                 display_bufer[0]=8;
  163.                 LED_PORT=0x7F;
  164.                 Delay500ms();
  165.         }
  166. }

  167. void Delay500ms()                //@12.000MHz
  168. {
  169.         unsigned char i, j, k;
  170.         i = 4;
  171.         j = 205;
  172.         k = 187;
  173.         do
  174.         {
  175.                 do
  176.                 {
  177.                         while (--k);
  178.                 } while (--j);
  179.         } while(--i);
  180. }
复制代码

11.261.7z

77.39 KB, 下载次数: 0

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表