找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1709|回复: 10
收起左侧

实现这个单片机LED闪烁代码应该怎么写?求指导如何学习单片机

  [复制链接]
ID:927246 发表于 2021-6-4 21:23 | 显示全部楼层 |阅读模式
共有8个LED灯,要求LED1每100ms闪烁,LED2每200ms闪烁,LED3每400ms闪烁,LED4每800ms闪烁,LED5每1600ms闪烁,LED6每3200ms闪烁,LED7每6400ms闪烁,LED8每12800ms闪烁.
回复

使用道具 举报

ID:752974 发表于 2021-6-5 08:31 | 显示全部楼层
用一个定时器定时10ms,在定时中断中计数,判断计数值即可。
回复

使用道具 举报

ID:88256 发表于 2021-6-5 09:27 | 显示全部楼层
我发觉论坛很多都是求程序来的,而且还是布置的作业,这样应付学习真的好吗?如果是写出的程序有问题,大家是很乐意帮助的,像这类明显是作业题却完全不懂脑筋不想去打好基础,只想甩锅给论坛,让坛友们代为完成,也没多少人有时间和精力去帮助你完成的。
回复

使用道具 举报

ID:716656 发表于 2021-6-5 09:54 | 显示全部楼层
程序涉及到LED灯闪烁,定时器。这分别是单片的2节课,led闪烁是很简单的,不管是作业还是啥,看几眼就明白了了,如果是本专业,或者本行业,第二节课一定要花时间经历去学,毕竟是单片机的核心功能。如果为了应付差事,实在没人给你写,你就有*偿*索*要吧。入行1年以上的估计不屑于花时间写这个,来证明自己顺便帮助你了
回复

使用道具 举报

ID:94031 发表于 2021-6-5 10:25 | 显示全部楼层
给个参考程序:
#include <reg51.h>

int count = 0;

sbit output = P3^0;
sbit led0   = P1^0;
sbit led1   = P1^1;
sbit led2   = P1^2;
sbit led3   = P1^3;
sbit led4   = P1^4;
sbit led5   = P1^5;
sbit led6   = P1^6;
sbit led7   = P1^7;

void initialize()
{
  /*TMOD|=0X02;
        TH0=0x10;//1us-0x9c;20us-0x3c;
        TL0=0x10;
        TR0=1;//也可以到用时才启动
        ET0=1;  
        EA = 1;*/
   
        ET0 = 1;//定时器中断打开
        TMOD = 0x01;//定时器工作方式 01-16位
        TR0 = 1;//启动定时器0
        TH0 = 0x38;//0x3800-50ms;//
        TL0 = 0x00;//
        EA = 1;
}

int main (void)
{
       
       
        initialize();

        while(1)
        {
    char e0,e1,e2,e3,e4,e5,e6,e7;
   
    if(count == 2){led0=!led0;e0=e0+1;count=0;}
                if(e0 == 2)   {led1=!led1;e1=e1+1;e0=0;}
                if(e1 == 2)   {led2=!led2;e2=e2+1;e1=0;}
                if(e2 == 2)   {led3=!led3;e3=e3+1;e2=0;}
                if(e3 == 2)   {led4=!led4;e4=e4+1;e3=0;}
                if(e4 == 2)   {led5=!led5;e5=e5+1;e4=0;}
                if(e5 == 2)   {led6=!led6;e6=e6+1;e5=0;}
                if(e6 == 2)   {led7=!led7;e7=e7+1;e6=0;}
        }
}

void timer0() interrupt 1
{
       
        TH0 = 0x38;//0xFF;//
        TL0 = 0x00;//
        count++;//计数
        output=!output;
}
回复

使用道具 举报

ID:272119 发表于 2021-6-5 13:40 | 显示全部楼层
这个确实太简单,只要有单片机底子,动一下脑筋做定时器加递增计数就可以.百度一下单片机教程慢慢学习多动脑去理解.
做电子行业带人我怕的就是不动脑只生搬硬套的,布置一个电路就会做一个电路,第二个相近的电路就不会了,这样会抓狂的,搞设计还是要有发散思维,有了1就想着0+1或者1+1,这样才能进步能成才.
回复

使用道具 举报

ID:859228 发表于 2021-6-6 08:30 | 显示全部楼层
用滴答定时器  看参考手册看demo
回复

使用道具 举报

ID:672194 发表于 2021-6-6 10:21 | 显示全部楼层
可以看一下单片机的使用手册,然后网上下载一些案例学习
回复

使用道具 举报

ID:932412 发表于 2021-6-6 11:22 | 显示全部楼层
这个根据手册,配置寄存器控制引脚,配置定时器寄存器定时即可,如何学习,认真看手册,配置寄存器,做过一遍,所有单片机都是这样的
回复

使用道具 举报

ID:495628 发表于 2021-6-7 11:52 | 显示全部楼层
会用定时器就用定时器;不会用定时器,就用延时+数组。
回复

使用道具 举报

ID:883031 发表于 2021-6-7 15:20 | 显示全部楼层
用定时器设定一个基准定时,如10ms,再对定时器中断进行中断次数计数,计数10次,让第一个灯闪,计数20次,第二个,。。。如此类推,就可以了。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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