题目:

练习题1:

关于变量的作用域和存储类别,这些关于C语言的一些基础知识在 浙大版《C语言程序设计(第三版)》中已经全面涉及,在此不一一赘述。

练习题2:

如图所示,为8*8LED点阵的外观和8*8点阵结构原理图

类似数码管动态显示,LED点阵的动画显示也是类似,通过不断地刷新,利用人眼的“余辉效应”,来让人感觉到就是一副图画在显示。

练习题3:

#include <reg52.h>   sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;unsigned char code imag[]={
0xFF,0xFF,0x81,0x81,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0xE7,0x81,0x81,0xFF,0xFF,0xFF,
0xFF,0xC3,0x81,0x00,0x00,0x00,0x81,0xC3,0xE7,0xFF,0xFF,0xFF,0xFF,0x99,0x99,0x99,
0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x81,0x81,0xC3,0xC3,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF
};                                            #通过字模软件生成相应的
void main()
{EA = 1;       //使能总中断ENLED = 0;    //使能U3ADDR3 = 0;    //因为需要动态改变ADDR0-2的值,所以不需要再初始化了TMOD = 0x10;  //设置T1为模式1TH1  = 0xFC;  //为T1赋初值0xFC67,定时1msTL1  = 0x67;ET1  = 1;     //使能T1中断TR1  = 1;     //启动T1while (1);
}
// 定时器1中断服务函数,利用定时器实现动态的刷新LED点阵屏幕
void InterruptTimer1() interrupt 3
{static unsigned char i=0;static unsigned char tmr=0;static unsigned char index=0;TH1=0xfc;TL1=0x67;P0=0XFF;switch(i){case 0:ADDR2=0;ADDR1=0;ADDR0=0;i++;P0=imag[0+index];break;case 1:ADDR2=0;ADDR1=0;ADDR0=1;i++;P0=imag[1+index];break;case 2:ADDR2=0;ADDR1=1;ADDR0=0;i++;P0=imag[2+index];break;case 3:ADDR2=0;ADDR1=1;ADDR0=1;i++;P0=imag[3+index];break;case 4:ADDR2=1;ADDR1=0;ADDR0=0;i++;P0=imag[4+index];break;case 5:ADDR2=1;ADDR1=0;ADDR0=1;i++;P0=imag[5+index];break;case 6:ADDR2=1;ADDR1=1;ADDR0=0;i++;P0=imag[6+index];break;case 7:ADDR2=1;ADDR1=1;ADDR0=1;i=0;P0=imag[7+index];break;}tmr++;if(tmr>=250){tmr=0;index++;if(index>=43){index=0;}}
}

效果:

LED点阵动画显示

练习题4:

本练习题要求让LED显示屏显示向右的动画,因为该开发板为横向扫描,所以有两种方式让LED点阵显示向右的动画。第一种方法:将LED点阵屏幕转置,然后按照练习题3中的方法进行设计以及编写代码进行运行。第二种方法:利用二维数组的知识,就是将每一帧的数值都存在一个数组里面,因为代码比较繁琐,仅仅给出作者资料中给出的源码。

/*
*******************************************************************************
*                     《手把手教你学51单片机(C语言版)》
*                    配套 KST-51 单片机开发板 示例源代码
*
*         (c) 版权所有 2014 金沙滩工作室/清华大学出版社 保留所有权利
*                 获取更多资料请访问:http://www.kingst.org
*
* 文件名:main.c
* 描  述:第7章 作业题4
* 版本号:v1.0.0
* 备  注:lesson7_7的向左移动改为向右移动
*******************************************************************************
*/#include <reg52.h>sbit ADDR0 = P1^0;
sbit ADDR1 = P1^1;
sbit ADDR2 = P1^2;
sbit ADDR3 = P1^3;
sbit ENLED = P1^4;unsigned char code image[30][8] = {{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},{0xFF,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE},{0xFF,0xFC,0xFE,0xFE,0xFE,0xFE,0xFE,0xFC},{0xFF,0xF8,0xFC,0xFC,0xFC,0xFC,0xFC,0xF8},{0xFF,0xF0,0xF9,0xF9,0xF9,0xF9,0xF9,0xF0},{0xFF,0xE1,0xF3,0xF3,0xF3,0xF3,0xF3,0xE1},{0xFF,0xC3,0xE7,0xE7,0xE7,0xE7,0xE7,0xC3},{0xFF,0x87,0xCE,0xCE,0xCE,0xCF,0xCF,0x87},{0xFF,0x0E,0x9C,0x9C,0x9C,0x9E,0x9F,0x0F},{0xFF,0x1C,0x38,0x38,0x38,0x3C,0x3E,0x1F},{0xFF,0x39,0x70,0x70,0x70,0x78,0x7C,0x3E}, {0xFF,0x73,0xE0,0xE0,0xE0,0xF0,0xF8,0x7C},{0xFF,0xE6,0xC0,0xC0,0xC0,0xE0,0xF0,0xF9},{0xFF,0xCC,0x80,0x80,0x80,0xC0,0xE1,0xF3},{0xFF,0x99,0x00,0x00,0x00,0x81,0xC3,0xE7},{0xFF,0x33,0x01,0x01,0x01,0x03,0x87,0xCF},{0xFF,0x67,0x03,0x03,0x03,0x07,0x0F,0x9F},{0xFF,0xCE,0x06,0x06,0x06,0x0E,0x1E,0x3F},{0xFF,0x9C,0x0C,0x0C,0x0C,0x1C,0x3C,0x7E},{0xFF,0x39,0x19,0x19,0x19,0x39,0x78,0xFC},{0xFF,0x73,0x33,0x33,0x33,0x73,0xF0,0xF8},{0xFF,0xE6,0x66,0x66,0x66,0xE6,0xE0,0xF0},{0xFF,0xCC,0xCC,0xCC,0xCC,0xCC,0xC0,0xE1},{0xFF,0x99,0x99,0x99,0x99,0x99,0x81,0xC3},{0xFF,0x33,0x33,0x33,0x33,0x33,0x03,0x87},{0xFF,0x67,0x67,0x67,0x67,0x67,0x07,0x0F},{0xFF,0xCF,0xCF,0xCF,0xCF,0xCF,0x0F,0x1F},{0xFF,0x9F,0x9F,0x9F,0x9F,0x9F,0x1F,0x3F},{0xFF,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x7F},{0xFF,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0xFF},
};void main()
{EA = 1;       //使能总中断ENLED = 0;    //使能U4,选择LED点阵ADDR3 = 0;TMOD = 0x01;  //设置T0为模式1TH0  = 0xFC;  //为T0赋初值0xFC67,定时1msTL0  = 0x67;ET0  = 1;     //使能T0中断TR0  = 1;     //启动T0while (1);
}
/* 定时器0中断服务函数 */
void InterruptTimer0() interrupt 1
{static unsigned char i = 0;  //动态扫描的索引static unsigned char tmr = 0;  //250ms软件定时器static unsigned char index = 0;  //图片刷新索引TH0 = 0xFC;  //重新加载初值TL0 = 0x67;//以下代码完成LED点阵动态扫描刷新P0 = 0xFF;   //显示消隐switch (i){case 0: ADDR2=0; ADDR1=0; ADDR0=0; i++; P0=image[index][0]; break;case 1: ADDR2=0; ADDR1=0; ADDR0=1; i++; P0=image[index][1]; break;case 2: ADDR2=0; ADDR1=1; ADDR0=0; i++; P0=image[index][2]; break;case 3: ADDR2=0; ADDR1=1; ADDR0=1; i++; P0=image[index][3]; break;case 4: ADDR2=1; ADDR1=0; ADDR0=0; i++; P0=image[index][4]; break;case 5: ADDR2=1; ADDR1=0; ADDR0=1; i++; P0=image[index][5]; break;case 6: ADDR2=1; ADDR1=1; ADDR0=0; i++; P0=image[index][6]; break;case 7: ADDR2=1; ADDR1=1; ADDR0=1; i=0; P0=image[index][7]; break;default: break;}//以下代码完成每250ms改变一帧图像tmr++;if (tmr >= 250)  //达到250ms时改变一次图片索引{tmr = 0;index++;if (index >= 30)  //图片索引达到30后归零{index = 0;}}
}

效果:

LED点阵右移

练习五:因为在练习四和练习三中,已经了解了LED点阵屏幕如何左右和上下动态显示。该练习题也是类似的做法,不详细解答。

练习题六:尝试实现流水灯,数码管和点阵同时显示,也是通过单片机的定时器作用,利用余辉效应,感觉是在同时显示。对于每一种效果的显示,可以单独设计函数来进行实现,这里就不详细解答了。

第七章 变量进阶与点阵LED 练习题相关推荐

  1. (学习笔记)手把手教你学51单片机:变量进阶与点阵LED

    一.变量的作用域 作用域:变量的有效范围.分为:局部变量和全局变量. 1.1局部变量 在函数内部声明的变量,只在本函数内部可以使用. 1.2全局变量 在函数外声明的变量就是全局变量. 二.变量的存储类 ...

  2. 手把手教你学51单片机-变量进阶与点阵LED

    变量的作用域 所谓的作用域就是指变量起作用的范围,也是变量的有效范围.变量按他的作用域可以 分为局部变量和全局变量. 局部变量 在一个函数内部声明的变量是内部变量,它只在本函数内有效,在本函数以外是不 ...

  3. 第七章 项目进阶,构建安全高效的企业服务

    第七章 项目进阶,构建安全高效的企业服务 1.Spring Security 1.1 基本介绍 Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案 ...

  4. Python学习入门基础 -- 第四章 列表、元组、字典、字符串变量使用、变量进阶

    Python基础入门知识点总结传送门 第一章 认识Python.Python常用集成开发环境PyCharm 第二章 注释.变量基本使用.变量的命名 第三章 运算符.判断if语句.while和for循环 ...

  5. JavaSE进阶 第七章 常用类 (一) String

    目录 1.注意点 2.String类的构造方法 3.String类的常用方法 传送门 1.注意点 java中用双引号括起来的都是String对象,且字符串是不可变的 java中用双引号括起来的字符串都 ...

  6. stata:第七章 使用指示变量

    应用stata学习计量经济学原理 第七章 使用指示变量 本章代码 第七章 使用指示变量 本章代码 * setup version 11.1 capture log close set more off ...

  7. c语言下标法改为指针变量法,C语言教材第七章指针实验.doc

    C语言教材第七章指针实验.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3.该文 ...

  8. AcWing进阶算法课Level-4 第七章 基础算法

    AcWing进阶算法课Level-4 第七章 基础算法 启发式合并 AcWing 2154. 梦幻布丁73人打卡 AcWing 3189. Lomsat gelral54人打卡 manacher算法 ...

  9. 第七章 LED将为我闪烁:控制发光二极管

    该Linux驱动用来控制开发板上的4个LED灯,即通过向Linux驱动发送数据可以控制LED灯的开关.LED驱动提供两种交互方式:命令和读写设备文件. 测试LED驱动之前需用USB线连接开发板,然后打 ...

  10. stm32 工业按键检测_「正点原子STM32Mini板资料连载」第七章 按键输入实验

    1)实验平台:正点原子STM32mini开发板 2)摘自<正点原子STM32 不完全手册(HAL 库版)>关注官方微信号公众号,获取更多资料:正点原子 第七章 按键输入实验 上一章,我们介 ...

最新文章

  1. 政府安全资讯精选 2017年第六期 车联网和移动安全可能成为未来监管重点
  2. 最简单的kafka demo案例
  3. 电子设计竞赛(三)-SPWM与PID
  4. 一个 人 的 态度 决定 他 成功 的 高度
  5. LeetCode 778. 水位上升的泳池中游泳(二分查找+dfs)
  6. mysql和python先学哪个_Python数据库操作 初识mysql和mysql基本操作#学习猿地
  7. 打开tomcat的管理平台,管理应用
  8. java接口返回类,Java接口和返回类型 - java
  9. cpu频率_CPU频率的提升到底会产生哪些影响?
  10. Requests 高级用法 —2.18.1 文档
  11. 捷信达酒店管理系统使用说明-前言
  12. Solidworks教程:solidworks常用的十个技巧
  13. ppt设置外观样式_幻灯片的外观设置
  14. 2021-7-28-自动化运维Ansible
  15. 大气辐射学期中知识点总结
  16. 【庖丁解牛】configure: error: Please reinstall the libzip distribution
  17. 如果一个女人喜欢你,又不跟你在一起,而且只跟你很暧昧,那代表什么
  18. js 对象转数组 数组转对象
  19. Django作业管理系统(1)
  20. JS: 填充指定长度字符串到目标字符串

热门文章

  1. Choerodon猪齿鱼诞生记
  2. MySQL(小步笔记)
  3. grep正则表达式后面的单引号和双引号的区别?
  4. HTML实现win10桌面,利用js实现仿win10桌面弹出窗口提示代码
  5. 进程间的通信方式有哪些?
  6. ps初始化html面表时停止工作打不开,PS打不开提示不能初始化因为首选项是无效的该怎么处理?...
  7. 四、守护线程 deamon
  8. Ubuntu Apt 如何使用清华源
  9. . NET多线程编程
  10. 无线5G CPE与AP