找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4544|回复: 1
收起左侧

关于51单片机8位流水灯源程序+Proteus仿真图

[复制链接]
ID:163020 发表于 2021-2-13 15:00 | 显示全部楼层 |阅读模式
设计目标:在开发板上实现一个键控8位流水灯,由两个按键控制4种流水花样,每种花样有明确的区别(全灭和全亮不算)

本案例用到单片机中断,位移等知识。

需要软件:keil c51 (本机环境 Keil uVision5)
                 proteus  (本机环境 proteus 8.11)
仿真电路图如下:
pro.png

需要原件: AT89C51
     ERJ-6ENF1021V                  *  8
     BUTTON                               *  2
     LED-BLUE                             *  8



驱动程序如下:
  1. #include <reg51.h>
  2. #include <intrins.h>


  3. //宏定义
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. #define LED P2

  7. sbit UP   = P3^2;
  8. sbit DOWN = P3^3;

  9. uint keyValue = 0;

  10. /*30毫秒延时函数*/
  11. void Delay30ms()                //@12.000MHz
  12. {
  13.         unsigned char i, j;

  14.         i = 59;
  15.         j = 90;
  16.         do
  17.         {
  18.                 while (--j);
  19.         } while (--i);
  20. }

  21. /*666毫秒延时函数*/
  22. void Delay666ms()                //@12.000MHz
  23. {
  24.         unsigned char i, j, k;

  25.         _nop_();
  26.         i = 6;
  27.         j = 16;
  28.         k = 174;
  29.         do
  30.         {
  31.                 do
  32.                 {
  33.                         while (--k);
  34.                 } while (--j);
  35.         } while (--i);
  36. }

  37. /*
  38. 初始化函数 p2口置为高电平
  39. */
  40. void init(void)                              
  41. {
  42.          LED  = 0xff;
  43.          UP   = 1;
  44.          EA   = 1;  //中断总允许为EA=1
  45.          //外部中断0
  46.          EX0  = 1;  //外部中断请求0标志位
  47.          IT0  = 0;  //IT0=0低电平触发
  48.          //外部中断1
  49.          EX1  = 1;  //外部中断请求1标志位
  50.          IT1  = 0;  //IT1=0低电平触发
  51. }

  52. /*
  53. 上选择外部中断
  54. */
  55. void UpKey(void) interrupt 0
  56. {
  57.         LED = 0xff;//led全灭
  58.         if(UP == 0)
  59.         {
  60.                 Delay30ms();               
  61.                 if(UP == 0)   
  62.                 {
  63.                         if(keyValue == 4){
  64.                                 keyValue = 0;                                
  65.                         }else if(keyValue < 5){
  66.                                 keyValue = keyValue + 1;
  67.                         }
  68.                 }
  69.         }
  70. }

  71. /*
  72. 下选择外部中断
  73. */
  74. void DownKey(void) interrupt 2
  75. {
  76.         LED = 0xff;//led全灭
  77.         if(DOWN == 0)
  78.         {
  79.                 Delay30ms();               
  80.                 if(DOWN == 0)   
  81.                 {
  82.                         if(keyValue == 0){
  83.                                 keyValue = 4;                                
  84.                         }else if(keyValue < 5){
  85.                                 keyValue = keyValue - 1;
  86.                         }
  87.                 }
  88.         }
  89. }

  90. void main(void)
  91. {
  92.         //uint  num  = 0;
  93.         uchar data1= 0xfe;        

  94.         init();        
  95.         Delay30ms();
  96.         LED = 0x00;//led全亮
  97.         Delay666ms();
  98.         LED = 0xff;//led全灭
  99.         Delay666ms();
  100.         while(1)
  101.         {
  102.                  switch(keyValue)
  103.                  {
  104.                          //左移1位
  105.                                 case 0 :
  106.                                 {
  107.                                         LED = data1;                                                        
  108.                                         data1 = data1<<1|0x01;      
  109.                                         if(data1==0xff){
  110.                                                 data1=0xfe;
  111.                                         }        
  112.                                         Delay666ms();
  113.                                         break;
  114.                                 }               
  115.        //右移1位                                
  116.                                 case 1 :  
  117.                                 {
  118.                                         LED = data1;                                                        
  119.                                         data1 = data1>>1|0x00;      
  120.                                         if(data1==0x00){
  121.                                                 data1=0xfe;
  122.                                         }        
  123.                                         Delay666ms();
  124.                                         break;
  125.                                 }               
  126.                                 //前四后四
  127.                                 case 2 :  
  128.                                 {
  129.                                         LED=0Xf0;
  130.                                         Delay666ms();
  131.                                         LED=0X0f;
  132.                                         Delay666ms();
  133.                                         break;

  134.                                 }
  135.                                 //插花        
  136.                                 case 3 :  
  137.                                 {
  138.                                         LED=0Xcc;
  139.                                         Delay666ms();
  140.                                         LED=0X33;
  141.                                         Delay666ms();
  142.                                         break;
  143.                                 }   
  144.         //插花1                                
  145.                                 case 4 :  
  146.                                 {
  147.                                         LED=0Xaa;
  148.                                         Delay666ms();
  149.                                         LED=0X55;
  150.                                         Delay666ms();
  151.                                         break;
  152.                                 }
  153.                  }                        
  154.         }      
  155. }
复制代码

全部资料51hei下载地址:
流水灯.zip (97.54 KB, 下载次数: 45)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:888312 发表于 2021-3-4 14:31 | 显示全部楼层
照着图画的,代码也是复制的,跑起来一个也不亮是哪里出问题了?(难倒我这个萌新了
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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