电子产品世界 » 论坛首页 » 高校专区 » 坤创E-Geek/天科大新电社 » 03. 单片机I/O口的操作1-LED灯篇

共12条 1/2 1 2 跳转至

03. 单片机I/O口的操作1-LED灯篇

高工
2019-01-22 23:59:07    评分

在经过上一帖中对如何进行备赛以及开发板进行简要了解后,接下来就要上代码了。本系列中每个训练题目帖内,都会同时发布蓝桥板和普通开发板(这里也称作小红板,详细介绍及原理图下载见02. 竞赛所使用开发板介绍及相关资源下载)的代码,供大家参考学习。如果大家有更好的代码也希望能够发帖分享出来。我们共同学习,共同进步~!

对于学习单片机来说,首先常规操作,不管什么板卡,上来肯定是要先点灯的,点亮一个LED灯,是建立玩转该板卡信心的必经之路。首先一起来看一下本节的题目要求,本节中共有三道题目,要求分别如下,你做出来了么?

题1、点亮发光二极管LED0

题2、闪烁发光二极管LED1

题3、LED0-LED7流水灯

好了闲话不多说,下面分别奉上相关代码,并在文末给出所有代码压缩包的下载链接,欢迎大家下载查看。

-----------------------蓝桥板代码---------------------

蓝桥板题1代码:

/*************************************************
题1、点亮发光二极管LED0
**************************************************/
#include<stc15f2k60s2.h>

#define    uchar  unsigned char
#define    uint   unsigned int

uchar temp,i;
void  delayms(uint z);
void  init();

void main()
{
	init();
	P2=0x80;
	while(1)
	{
		P0=0xfe;
	}
}

void  delayms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=845;y>0;y--);
}

void  init()
{
	P2=0xa0;
	P0=0x00;   //关闭继电器蜂鸣器
	P2=0x80;
	P0=0xff;  //关闭led灯
	P2=0xc0;
	P0=0xff;  //选择数码管
	P2=0xff;
	P0=0xff;  //关闭数码管
}

蓝桥板题2代码:

/*********************************************************
2、闪烁发光二极管LED1
**********************************************************/
#include<stc15f2k60s2.h>
#define    uchar  unsigned char
#define    uint   unsigned int
uchar temp,i;
void  delayms(uint z);
void  init();
void main()
{
    init();
    P2=0x80;
    while(1)
    {
        P0=0xfd;
        delayms(500);
        P0=0xff;
        delayms(500);
    }
}
void  delayms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=845;y>0;y--);
}
void  init()
{
    P2=0xa0;
    P0=0x00;   //关闭继电器蜂鸣器
    P2=0x80;
    P0=0xff;  //关闭led灯
    P2=0xc0;
    P0=0xff;  //选择数码管
    P2=0xff;
    P0=0xff;  //关闭数码管
}

蓝桥板题3代码:

/*****************************************************
3、LED0-LED7流水灯
******************************************************/
#include<stc15f2k60s2.h>
#include"intrins.h"
#define    uchar  unsigned char
#define    uint   unsigned int
uchar temp,i;
void delayms(uint z);
void init();
void main()
{
    init();
    while(1)
    {
        P2=0x80;
        {
            temp=0xfe;
            P0=temp;
            delayms(1000);
            for(i=0;i<8;i++)
            {
                temp=_crol_(temp,1);
                P0=temp;
                delayms(500);
            }
        }
    }
}
void  delayms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=845;y>0;y--);
}
void  init()
{
 P2=0xa0;
 P0=0x00;   //关闭继电器蜂鸣器
 P2=0x80;
 P0=0xff;  //关闭led灯
 P2=0xc0;
 P0=0xff;  //选择数码管
 P2=0xff;
 P0=0xff;  //关闭数码管
}

-----------------------小红板代码----------------------

小红板题1代码:


/******************************************
题1、点亮发光二极管LED0
*******************************************/
#include"reg52.h"
#define  uchar unsigned char
#define  uint  unsigned int 
void delayms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void main()
{
 while(1)
 {
  P1=0xfe;
 }
}

小红板题2代码:


/**************************************
 题2.闪烁发光二极管LED1
***************************************/
#include"reg52.h"
#define  uchar unsigned char
#define  uint  unsigned int 
void delayms(uint z)
{
    uint x,y;
    for(x=z;x>0;x--)
        for(y=110;y>0;y--);
}
void main()
{
 while(1)
 {
    P1=0xfd;
    delayms(1000);
    P1=0xff;
    delayms(1000);
  }
}

小红板题3代码:

/***************************************
 题3、LED0-LED7流水灯
****************************************/
#include"reg52.h"
#include"intrins.h"
#define  uchar unsigned char
#define  uint  unsigned int 
void delayms(uint z)
{
  uint x,y;
  for(x=z;x>0;x--)
    for(y=110;y>0;y--);
}
void main()
{
 uchar temp,i;
 while(1)
 {
      temp=0xfe;     //左移
    P1=temp;
    delayms(1000);
    for(i=0;i<8;i++)    
    {
        temp=_crol_(temp,1);
        P1=temp;
        delayms(1000);
    }
//    temp=0x7f;     //右移
//    P1=temp;
//    delayms(1000);
//    for(i=0;i<8;i++)    
//    {
//        temp=_cror_(temp,1);
//        P1=temp;
//        delayms(1000);
//    }
    } 
}

----------------所有代码打包下载链接------------------

03. 单片机IO口的操作1-LED灯篇_全部代码打包.zip


全部做完的同学们,可以接着往下进行 04. 单片机I/O口的操作2-数码管篇 的题目练习哦~~对代码有问题,欢迎回帖哦~

希望每天都能看到努力追梦的自己!加油!!




管理员
2019-01-23 09:33:36    评分
2楼

谢谢楼主分享


助工
2019-01-23 11:21:28    评分
3楼

去年的题目就是“精通各种点灯”,很有用!!


菜鸟
2019-01-23 11:24:21    评分
4楼

结合着电路图不难发现,蓝桥杯的电路决定了它的程序要有P27  P26   P25的操作(138译码器的使用)再结合与非门和锁存器就可以按时间选择要操作的外围设备了


菜鸟
2019-01-23 16:56:25    评分
5楼

主要就是38译码器控制573锁存器,只要理解这,再加上一些数字电路的知识就行啦


菜鸟
2019-01-23 18:33:05    评分
6楼

为什么蓝桥杯板子的代码要有init()这个初始化函数,问题就在573锁存器上,估计一开始很多使用者也会对这儿感到匪夷所思,与一般的51开发板不同的是,蓝桥杯板子有一层包装,就是573锁存器,而当拆开这层包装之后,它就跟普通的51开发板没什么不一样,所有的问题都会迎刃而解。


菜鸟
2019-01-23 19:53:48    评分
7楼

给力


菜鸟
2019-01-23 20:01:34    评分
8楼
刚开始探索蓝桥杯板子绝对是一件很容易挨打的事情(可能被室友的无情殴打),蜂鸣器的声音会督促你赶紧摸透这块板子,尽快脱离挨打的苦海,刚开始也就是38译码器和锁存器的配合来控制io口,当然最主要的就是我们最喜欢的点灯环节,刚开始看到小灯blingbling的,一定会让自己很有成就感,并迫切的进入下个环节——按键点灯环节!期待大Z老师的下一个按键环节。

高工
2019-01-25 00:00:26    评分
9楼
来拜读一下大佬的帖子,支持

菜鸟
2019-01-27 18:56:26    评分
10楼

点灯就是开启了单片机的大门


共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]