找回密码
 立即注册

QQ登录

只需一步,快速开始

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

想得到一段简洁的单片机代码

[复制链接]
跳转到指定楼层
楼主
ID:623119 发表于 2020-5-7 21:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
功能八个led灯并排,编号1,2,3,4,5,6,7,8,先是同时亮起(1,8)两个灯,再依次点亮(2,6)(3,7)(4,5)(3,7)(2,6)(1,8),然后一直循环进行。
#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

#define led P2


void delay(u16 i)
{
        while(i--);
}

void main()
{        
        while(1)
        {
         led=0x7e;  //亮1,8
         delay(50000);
         led=0xbd;  //亮2,7
         delay(50000);
         led=0xdb; //亮3,6
         delay(50000);
         led=0xe7; //亮4,5
         delay(50000);
         led=0xdb;//亮3,6
         delay(50000);
         led=0xbd; //亮2,7
         delay(50000);
        }
}        


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

使用道具 举报

沙发
ID:612392 发表于 2020-5-7 22:07 | 只看该作者
#include "reg52.h"
#include "intrins.h"

#define uint unsigned int
#deinfe uchar unsigned char

#define led P2
uchar table[6]={0x7e,0xbd,0xdb,0xe7,0xdb,0xbd};
uchar flag=0;

void delay(uint i)
{
        while(i--);
        flag++;
        if(flag>=5)
        {
             flag=0;
        }
}

void main()
{        
        while(1)
        {
         led=table[flag];  
         delay(50000);
        }
}     

其实也没简洁多少,建议不要用delay,用定时器更好,节省MCU计算资源。   
回复

使用道具 举报

板凳
ID:452950 发表于 2020-5-7 22:10 | 只看该作者
本帖最后由 xxpp2011 于 2020-5-7 22:39 编辑


unsigned char i=0;   
void main()
{   
while(1)
{
   switch(i%6)
       {
          case 0:  led=0x7e;break;  //亮1,8
          case 1:  led=0xbd;break;  //亮2,7
          case 2:  led=0xdb;break;  //亮3,6
          case 3:  led=0xe7;break;  //亮4,5
          case 4:  led=0xdb;break;  //亮3,6
          case 5:  led=0xbd;break;  //亮2,7
        }
   i++;
  delay(50000);
}
}
回复

使用道具 举报

地板
ID:332444 发表于 2020-5-7 22:33 | 只看该作者
回复

使用道具 举报

5#
ID:584814 发表于 2020-5-8 11:38 | 只看该作者
#include "reg52.h"
#include "intrins.h"

typedef unsigned char u8;
typedef unsigned int u16;

#define led P2

u8 code PP[]={0x7e,0xbd,0xdb,0xe7,0xdb,0xbd};//加的

void delay(u16 i)
{
        while(i--);
}

void main()
{        
       u8 i;  //加的
for(i=0;i<6;i++){led=PP[i];delay(50000);}//无需while(1)
}        
回复

使用道具 举报

6#
ID:266943 发表于 2020-5-8 16:20 | 只看该作者
本帖最后由 出来逛逛 于 2020-5-8 16:41 编辑

int i=0;
while(1)
{
     led=~(1<<(7-i)|1<<i);
     i++;
     delay(50000);
    if(i==3){i++;}
    if(i==7){i=0;}
}
回复

使用道具 举报

7#
ID:266943 发表于 2020-5-8 16:32 | 只看该作者
int i=0;
while(1)
{
     led=~(1<<(7-i)|1<<i);
     i++;
     delay(50000);
    if(i==3){i++;}
    if(i==7){i=0;}
}
回复

使用道具 举报

8#
ID:726650 发表于 2020-5-8 22:48 | 只看该作者
int i=0;
while(1)
{
     led=~(1<<(7-i)|1<<i);
     i++;
     delay(50000);
    if(i==3){i++;}
    if(i==7){i=0;}
}
回复

使用道具 举报

9#
ID:282850 发表于 2020-5-9 14:39 | 只看该作者

这是最简洁的方式,前些天想过一下用移位,没往下考虑。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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