前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >单片机实验说明<一>数字口基本使用

单片机实验说明<一>数字口基本使用

作者头像
zhangrelay
发布2021-03-03 14:48:42
发布2021-03-03 14:48:42
68800
代码可运行
举报
运行总次数:0
代码可运行

机器人类单片机课程为突出专业特色,对实验作了大量补充和讲解,除了uno,cozmo和tianbotmini之外,加入了大量相关单片机案例,使课程紧密融合物联网和机器人工程,增加Linux下调试方式,作为windows之外的补充,补充esp8266,esp32等wifi单双核单片机,补充操作系统概念。相关内容在课程中已经测试过,但并未得到有效的批评和建议,现全部公开。

项目名称:实验一 流水灯设计/报警产生器设计

这是典型数字口应用案例。

实验一(上) 流水灯设计

设计要求:

(1)掌握单片机实验箱的使用方法与程序调试技巧;

(2)学会使用51系列单片机I/O的基本输入输出功能。

  1. 使发光二极管LED4-6-8-10闪烁 间隔1000毫秒。
  2. 使发光二极管从LED10往LED3循环点亮间隔500毫秒,然后熄灭。
  3. 依次点亮LED3到LED10发光二极管隔500毫秒。请编写程序并完成调试。

注意:LED3-LED10为重命名。

通过了解 P1 口连接 3-8 译码器进行 LED 选通电路图及数码管位选电路、P0 的控制 74HC245 驱动 LED 的电路和 P3 口连接的独立键盘电路,见图 1-1。

软件代码:

依据具体调试过程,方法不唯一,在重点部分加入注释,使程序更容易阅读和理解。

参考代码1:

代码语言:javascript
代码运行次数:0
运行
复制
/*****************************************************************************
 *                             头文件                                   *
 *****************************************************************************/
#include "hml/hml.h"
#define LSA   P1_5  			
#define LSB   P1_6  			
#define LSC   P1_7 
/*****************************************************************************
 *                             初始化                                   *
 *****************************************************************************/
void sys_init(void)
{
	 LSA = 0;
	 LSB = 0;
	 LSC = 0; 
}
/*****************************************************************************
 *                             主函数                                   *
 *****************************************************************************/
void main(void)
{
    sys_init();
    while(true)
    {
        /* send per 1000ms */
        sleep(1000);
        P0=0x55;
        /* send per 1000ms */
        sleep(1000);
        P0=0xFF;
    }
}

参考代码2:

代码语言:javascript
代码运行次数:0
运行
复制
/*****************************************************************************
 *                             头文件                                   *
 *****************************************************************************/
#include "hml/hml.h"
#define LSA   P1_5  			
#define LSB   P1_6  			
#define LSC   P1_7 
/*****************************************************************************
 *                             初始化                                   *
 *****************************************************************************/
void sys_init(void)
{
	 LSA = 0;
	 LSB = 0;
	 LSC = 0; 
}
/*****************************************************************************
 *                             主函数                                   *
 *****************************************************************************/
void main(void)
{
    sys_init();
    unsigned char j=0,sel=0x7F;
    for(j=0;j<8;j++)		
    {	
	P0=sel;
	sleep(500);	
	sel=sel>>1|0x80; 	
    }
    sel=0xFF;
    P0=sel;
    sleep(10000);						      
}

参考代码3:

代码语言:javascript
代码运行次数:0
运行
复制
/*****************************************************************************
 *                             头文件                                   *
 *****************************************************************************/
#include "hml/hml.h"
#define LSA   P1_5  			
#define LSB   P1_6  			
#define LSC   P1_7 
/*****************************************************************************
 *                             初始化                                   *
 *****************************************************************************/
void sys_init(void)
{
	 LSA = 0;
	 LSB = 0;
	 LSC = 0; 
}
/*****************************************************************************
 *                             主函数                                   *
 *****************************************************************************/
void main(void)
{
    sys_init();
    unsigned char j=0,sel=0xFE;
    for(j=0;j<8;j++)		
    {	
	P0=sel;
	sleep(500);	
	sel=sel<<1|0x01; 	
    }
    sel=0xFF;
    P0=sel;
    sleep(10000);						      
}

思考题:

1.修改程序,实现 4 个按键控制,自上至下、自下至上、自中间至两边、自两边至中间循环点亮 LED,循环次数均为 3 圈,3 圈结束后恢复到所有 LED 熄灭的正常状态。请编写程序并调试。 2.编写程序,实现 8 个发光二极管同时点亮,但亮度从上到下由亮变暗(选做)。 3. 简述你在本实验中遇到过哪些问题?这些问题是解决的?有何收获和体会?

实验一(下) 报警产生器设计

设计要求:

用P4.4输出1KHz和500Hz的音频信号驱动扬声器,作报警信号,要求1KHz信号响100ms,500Hz信号响200ms,交替进行,P1.7接一开关进行控制,当开关合上响报警信号,当开关断开报警信号停止,请按流程图编出程序。

1)首先定义 sfr P4=0xe8 2)然后主函数设置 P4SW=0X70; //将P4.4/5/6设置为I/O口

注意P4.4口!

把喇叭当作LED灯,分别给端口送1khz和500hz的方波试试看效果是什么样的。

软件代码:

依据具体调试过程,方法不唯一,在重点部分加入注释,使程序更容易阅读和理解。

参考代码:

代码语言:javascript
代码运行次数:0
运行
复制
/*****************************************************************************
 *                             头文件                                   *
 *****************************************************************************/
#include "hml/hml.h"
/*****************************************************************************/
/**                            初始化    
******************************************************************************/
void sys_init(void)
{
    ;
}
void sound(int hz)
{
    char time=500/hz;
    sleep(time);
    P4_4=1;
    sleep(time);
    P4_4=0;
}
/*****************************************************************************/
/**                            主函数    
******************************************************************************/
void main(void)
{
    sys_init();
    unsigned int a=600;
    while(a--)
    {
	sound(500);
    }
    a=600;
    while(a--)
    {
	sound(250);
    }
    a=600;
    while(a--)
    {
	sound(125);
    }
}

思考题:

扬声器音量大小如何调节,是否和LED亮度调节类似呢?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 项目名称:实验一 流水灯设计/报警产生器设计
    • 实验一(上) 流水灯设计
      • 设计要求:
      • 软件代码:
      • 思考题:
    • 实验一(下) 报警产生器设计
      • 设计要求:
      • 软件代码:
      • 思考题:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档