微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 左移右移来回循环流水灯源码

左移右移来回循环流水灯源码

时间:10-02 整理:3721RD 点击:
左移右移来回循环流水灯源码,刚开始学单片机,留个纪念
#include<reg52.h>
sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;
void main()
{
        unsigned int i = 0;
        unsigned char j = 0;
        unsigned char cnt = 0;
        ENLED = 0;
        ADDR3 = 1;
        ADDR2 = 1;
        ADDR1 = 1;
        ADDR0 = 0;
        while(j<258)
        {
                cnt = 0;
                if(j%2 == 0)
                {               
                        while(cnt < 8)
                        {       
                                P0 = ~(0x01 << cnt);
                                for(i=0;i<15000;i++);
                                cnt++;
                         }
                }
                else
                {       
                        while(cnt < 8)
                        {
                                P0 = ~(0x80 >> cnt);
                                for(i=0;i<15000;i++);
                                cnt++;
                        }
                }
                j++;       
        }
}

很奇怪的想法。

哪里奇怪了?

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
uchar code li[28]={0,0,0,0,0,1,2,4,8,16,32,64,128,0,0,0,128,64,32,16,8,4,2,1,0,0,0,0};        //控制流星灯的单灯输出
uint i=0,n=1,k=0;
void delay(int ms);
void main()
{
        while(1)
        {
                for(k=1;k<1500;k++)                                         //调整流星灯的速度
                {
                        i++;                                                          //i控制灯的占空比,调节灯的亮度,形成扫尾
                        if(i>80)
                        {
                                P1=0xff-li[n];
                        }
                        if(i>60)
                        {
                                P1=0xff-li[n+1];       
                        }
                        if(i>40)
                        {
                                P1=0xff-li[n+2];
                        }
                        if(i>30)
                        {
                                P1=0xff-li[n+3];
                        }
                        if(i>=100)
                        {
                                i=0;
                        }
                        delay(0);
                        P1=0xff;
                }
                        n++;                                   //n是配合数组完成对灯的输出
                        if(n==24)
                        n=1;
         }
}
void delay(int ms)
{
        while(ms--)
        {
                ms++;
                ms--;
        }
}

个人不是很了解,但是用delay很耗CPU还没有工作

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top