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

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

机器人类单片机课程为突出专业特色,对实验作了大量补充和讲解,除了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:


  
  1. /*****************************************************************************
  2. * 头文件 *
  3. *****************************************************************************/
  4. #include "hml/hml.h"
  5. #define LSA P1_5
  6. #define LSB P1_6
  7. #define LSC P1_7
  8. /*****************************************************************************
  9. * 初始化 *
  10. *****************************************************************************/
  11. void sys_init(void)
  12. {
  13. LSA = 0;
  14. LSB = 0;
  15. LSC = 0;
  16. }
  17. /*****************************************************************************
  18. * 主函数 *
  19. *****************************************************************************/
  20. void main(void)
  21. {
  22. sys_init();
  23. while(true)
  24. {
  25. /* send per 1000ms */
  26. sleep(1000);
  27. P0=0x55;
  28. /* send per 1000ms */
  29. sleep(1000);
  30. P0=0xFF;
  31. }
  32. }

参考代码2:


  
  1. /*****************************************************************************
  2. * 头文件 *
  3. *****************************************************************************/
  4. #include "hml/hml.h"
  5. #define LSA P1_5
  6. #define LSB P1_6
  7. #define LSC P1_7
  8. /*****************************************************************************
  9. * 初始化 *
  10. *****************************************************************************/
  11. void sys_init(void)
  12. {
  13. LSA = 0;
  14. LSB = 0;
  15. LSC = 0;
  16. }
  17. /*****************************************************************************
  18. * 主函数 *
  19. *****************************************************************************/
  20. void main(void)
  21. {
  22. sys_init();
  23. unsigned char j=0,sel=0x7F;
  24. for(j=0;j<8;j++)
  25. {
  26. P0=sel;
  27. sleep(500);
  28. sel=sel>>1|0x80;
  29. }
  30. sel=0xFF;
  31. P0=sel;
  32. sleep(10000);
  33. }

参考代码3:


  
  1. /*****************************************************************************
  2. * 头文件 *
  3. *****************************************************************************/
  4. #include "hml/hml.h"
  5. #define LSA P1_5
  6. #define LSB P1_6
  7. #define LSC P1_7
  8. /*****************************************************************************
  9. * 初始化 *
  10. *****************************************************************************/
  11. void sys_init(void)
  12. {
  13. LSA = 0;
  14. LSB = 0;
  15. LSC = 0;
  16. }
  17. /*****************************************************************************
  18. * 主函数 *
  19. *****************************************************************************/
  20. void main(void)
  21. {
  22. sys_init();
  23. unsigned char j=0,sel=0xFE;
  24. for(j=0;j<8;j++)
  25. {
  26. P0=sel;
  27. sleep(500);
  28. sel=sel<<1|0x01;
  29. }
  30. sel=0xFF;
  31. P0=sel;
  32. sleep(10000);
  33. }

思考题:

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的方波试试看效果是什么样的。

软件代码:

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

参考代码:


  
  1. /*****************************************************************************
  2. * 头文件 *
  3. *****************************************************************************/
  4. #include "hml/hml.h"
  5. /*****************************************************************************/
  6. /** 初始化
  7. ******************************************************************************/
  8. void sys_init(void)
  9. {
  10. ;
  11. }
  12. void sound(int hz)
  13. {
  14. char time=500/hz;
  15. sleep(time);
  16. P4_4=1;
  17. sleep(time);
  18. P4_4=0;
  19. }
  20. /*****************************************************************************/
  21. /** 主函数
  22. ******************************************************************************/
  23. void main(void)
  24. {
  25. sys_init();
  26. unsigned int a=600;
  27. while(a--)
  28. {
  29. sound(500);
  30. }
  31. a=600;
  32. while(a--)
  33. {
  34. sound(250);
  35. }
  36. a=600;
  37. while(a--)
  38. {
  39. sound(125);
  40. }
  41. }

思考题:

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


 

文章来源: zhangrelay.blog.csdn.net,作者:zhangrelay,版权归原作者所有,如需转载,请联系作者。

原文链接:zhangrelay.blog.csdn.net/article/details/109194115

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。