文章目录

  • 实二验题目
  • 实验代码
  • proteus8.9仿真
  • 完整代码工程-实验报告-PROTEUS工程仿真工程在在这个链接下载
  • 实验由林学长完成,希望学弟学妹可以点个赞并且关注我一下

实二验题目

一、实验目的

  1. 掌握多位数码管动态显示编程方法。
  2. 掌握矩阵键盘编程方法。

二、实验内容

  1. 验证课堂例题
    编译下载运行课堂例题——“LED数码管动态显示”(IO_ex4)和“矩阵键盘显示按键编号”(IO_ex5),查看运行结果。理解程序的编程思想和程序执行过程。

  2. 设计程序
    参考上述例题的编程思路,参考图1-1(实验1LED控制电路)、图2-1和图2-2(实验2指导),自行设计LED、数码管和矩阵键盘电路,对所设计的电路进行编程,实现按键控制流水灯模式并在数码管进行模式显示的程序编写与调试。
    具体要求如下:
    (1)初始状态下,数码管显示“000001”,LED按照模式1进行运行;
    (2)按下1键后,LED按照模式1进行运行,数码管显示“000001”;
    (3)按下2键后,LED按照模式2进行运行,数码管显示“000002”;
    (4)按下其余按键,当前LED运行状态和数码管显示无变化。
    样式1:每次仅一个LED熄灭,熄灭LED从L0至L7转移,如此循环运行。
    样式2:每次仅一个LED熄灭,熄灭LED从L7至L0转移,如此循环运行。
    在设计报告中,需进行总体设计思路描述,给出所涉及到的主程序、中断程序、关键功能子函数的流程图和设计代码。描述程序调试结果及出现的问题。

实验代码

//**************************************************************************************
//文件名:矩阵键盘实验
//修改日期:2020年9月20日
//功能描述:按下不同的按键,显示对应的数字
//硬件连接:单片机PC0~PC7接4x4键盘行线列线,PA3和PA4分别接两个74HC573锁存器,再接数码管
//调试状态:正常运行,正常执行功能
//**************************************************************************************//文件包含
#include <iom16v.h>
#include <macros.h>//宏定义
#define  uchar unsigned char
#define  uint  unsigned int//全局变量定义
//数码管使用
uchar const DuanXuan[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//共阴级数码管显示0-F
uchar const WeiXuan[6]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};//从左到右第0-5位数码管
uchar LEDBuf[6]={0,0,0,0,0,1};//存放数码管显示数据,0-9数字格式
int a[9]={0X00,0x01,0X03,0X07,0X0f,0X1F,0X3F,0X7F,0xFF};//流水灯1输出码组
int b[9]={0X00,0x01,0X03,0X07,0X0f,0X1F,0X3F,0X7F,0xFF};//流水灯1输出码组
int c[9]={0X00,0X80,0XC0,0Xe0,0Xf0,0XF8,0XFc,0XFe,0xff};//流水灯2输出码组
//函数声明
void delay(uint ms);             //延时函数
void LEDshow(uchar LEDBuf[6]);   //数码管显示函数
uchar key_press();               //按键检测函数
uchar key_where();               //按键定位函数//**************************************************************************************
//主函数
//**************************************************************************************
void main(void)
{    int temp=0x01,i,n,flag;//初始化流水灯DDRB=0XFF;//初始化数码管DDRA|=BIT(3);            //PA3设置为输出DDRA|=BIT(4);            //PA4设置为输出DDRD=0XFF;               //PD口设置为输出//初始化键盘DDRC=0x0F;               //高4位为输入,低4位为输出PORTC&=0xF0;             //低4位输出低电平while(1){if(key_press())           //判断键盘中是否有按键按下{           LEDBuf[5]=key_where();//将扫描的按键值赋值给数码管输出数组if(LEDBuf[5]==1)//按下1键,执行流水灯样式1,数码管显示1{n=0;//流水灯复位flag=1;//数码管显示1标志位LEDBuf[5]=1;//数码管显示1for(i=0;i<8;i++)//样式1输出码组赋值{a[i]=b[i];}}else if(LEDBuf[5]==2)//按下2键,执行流水灯样式2,数码管显示2{n=0;//流水灯复位flag=2;//数码管显示2标志位LEDBuf[5]=2;//数码管显示2for(i=0;i<8;i++)//样式2输出码组赋值{a[i]=c[i];}}else{LEDBuf[5]=flag;//数码管显示样式2}}PORTB=a[n];//流水灯输出寄存器赋值n++;if(n>8)//保证每次循环周期为9次{n=0;//流水灯刷新}delay(1);//流水灯循环延时LEDshow(LEDBuf);//数码管刷新}
}//**************************************************************************************
//通用功能子函数
//**************************************************************************************//**************************************************************************************
//函数名:延时函数
//输入参数:ms
//**************************************************************************************
void delay(uint ms)
{uint p,q;for(p=0;p<ms;p++){for(q=0;q<1141;q++);}
}         //**************************************************************************************
//数码管模块子函数
//**************************************************************************************//**************************************************************************************
//函数名:LEDshow
//功能:在数码管上显示出对应的数字。0-5位数码管显示数据放在LEDBuf[]中,存放0-9数字格式
//输入参数:LEDBuf[]每个元素对应6位数码管每位的显示数字(0-F)
//**************************************************************************************void LEDshow(uchar LEDBuf[6])
{   uchar i;for(i=0;i<6;i++)              //循环扫描一次{   //数码管位选程序PORTD=WeiXuan[i];          //选择第i位数码管PORTA|=BIT(PA4);             //PA4输出高电平,位选端拉高PORTA&=~BIT(PA4);           //PA4输出低电平,位选端拉低,位选锁存//数码管段选程序 PORTD=DuanXuan[LEDBuf[i]]; //输出段选PORTA|=BIT(PA3);            //PA3输出高电平,段选端拉高PORTA&=~BIT(PA3);           //PA3输出低电平,段选端拉低,段选锁存  delay(1);}
}//**************************************************************************************
//矩阵键盘模块子函数
//**************************************************************************************//**************************************************************************************
//函数名:key_press
//功能:检测是否有低电平出现,来判断是否有按键按下
//返回值:1-有键按下,0-无键按下
//**************************************************************************************
uchar key_press(void)
{uchar temp;PORTC=0xF0;              //高4位输出高电平,低4位输出低电平//DDRC=0x0F;               //高4位为输入,低4位为输出 temp=PINC;                  //读取PC口if(temp==0xF0)              //输入端未出现低电平(没有按键按下) {return 0;              //输出0}else                     //有按键按下{         return 1;              //输出1}
}//**************************************************************************************
//函数名:key_where
//功能:读行线列线电平,根据按键键值进行定位
//返回值:按键代表的十六进制数字(0-F)
//**************************************************************************************uchar key_where(void)
{uchar Code;//存储PINC值,即引脚读入值uchar Hang=0X7F;//行线输出值uchar Lie;//列线值,4位 delay(10);if(key_press())               //调用按键检测函数{do{//DDRC=0X0F;            //高4位(列线)输入,低4位(行线)输出     Hang=((Hang<<1)|(Hang>>7)); //循环左移,每一次只输出一个低电平PORTC=Hang;             //低四位在C口输出,行线逐位输出0        Code=PINC; Lie=Code&0xF0;          //读取key高四位(列线)}while(Lie==0xF0);        //列线出现全1为不在该行,列线出现0说明该键在该行while(key_press());         //等待按键松开 switch(Code)                //有16种情况{case 0xEE:             //1110 1110  第1行第1列(1,1)Code=0x1;          //显示1break;case 0xDE:             //(1,2)Code=0x2;break; case 0xBE:             //(1,3)Code=0x3;break;case 0x7E:             //(1,4)Code=0xA;break;case 0xED:             //(2,1)Code=0x4;break;case 0xDD:             //(2,2)Code=0x5;break;case 0xBD:             //(2,3)Code=0x6;break;case 0x7D:             //(2,4)Code=0xB;break;case 0xEB:             //(3,1)Code=0x7;break;case 0xDB:             //(3,2)Code=0x8;break;case 0xBB:             //(3,3)Code=0x9;break;case 0x7B:             //(3,4)Code=0xC;break;case 0xE7:             //(4,1)Code=0xE;break;case 0xD7:             //(4,2)Code=0x0;break;case 0xB7:             //(4,3)Code=0xF;break;case 0x77:             //(4,4)Code=0xD;break;default:Code=16;       }}else//无按键按下{Code=16;}return Code;
}

proteus8.9仿真

完整代码工程-实验报告-PROTEUS工程仿真工程在在这个链接下载

  • 四个实验资源

实验由林学长完成,希望学弟学妹可以点个赞并且关注我一下

实验二 人机交互接口实验相关推荐

  1. 20175212童皓桢 Java实验二-面向对象程序设计实验报告

    20175212童皓桢 Java实验二-面向对象程序设计实验报告 实验内容 初步掌握单元测试和TDD 理解并掌握面向对象三要素:封装.继承.多态 初步掌握UML建模 熟悉S.O.L.I.D原则 了解设 ...

  2. 20172310《程序设计与数据结构》(下)实验二:二叉树实验报告

    20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...

  3. 嵌入式系统 实验二 串口通信实验

    实验二 串口通信实验 一.实验目的 1.)了解 USART 的基本特性: 2.)掌握用库函数操作 USART 的方法: 3.)掌握如何使用 STM32 的串口发送和接收数据. 二.实验环境 1.)硬件 ...

  4. java 二叉树实验报告_20172310《程序设计与数据结构》(下)实验二:二叉树实验报告...

    20172310<程序设计与数据结构>(下)实验二:二叉树实验报告 报告封面 课程:<软件结构与数据结构> 班级: 1723 姓名: 仇夏 学号:20172310 实验教师:王 ...

  5. matlab建立二阶开环系统仿真图,实验二 Simulink仿真实验

    实验二 Simulink仿真实验 一. 实验目的: 1.学会使用Matlab软件中的Simulink仿真工具. 2.了解二阶系统瞬态响应指标的意义其计算. 二. 实验内容及原理 1. 用Matlab仿 ...

  6. CSAPP实验二——bomb lab实验

    CSAPP实验二-- bomb lab实验 实验前准备 第一部分(phase_1) 第二部分(phase_2) 第三部分(phase_3) 第四部分(phase_4) 第五部分(phase_5) 第六 ...

  7. 【通信原理】实验二 角度调制实验

    目录 实验二 角度调制实验 一.实验目的 二.实验原理: 1.角度调制 (1)角度调制 (1)频率调制(FM): (2)相位调制(PM) (3)单音调制FM与PM (4)非相干解调 2.MATLAB中 ...

  8. 计算机图形学——实验二 几何图形变换实验

    实验二 几何图形变换实验 一.实验目的和要求 进一步掌握二维.三维变换的数学知识.变换原理.变换种类.变换方法: 利用OpenGL实现二维.三维图形变换,在屏幕上显示变换过程或变换结果: 掌握Open ...

  9. 华软java综合实验二_2018-2019-2 20175311 实验二 《Java开发环境的熟悉》实验报告

    2018-2019-2 20175303 实验二 <Java开发环境的熟悉>实验报告 一.实验准备 1.了解掌握实验所要用到的三种代码 伪代码 产品代码 测试代码 2.IDEA中配置单元测 ...

最新文章

  1. 第二百一十七节,jQuery EasyUI,NumberSpinner(数字微调)组件
  2. 反思前进路上碰到困难时 应有的应对方法
  3. 【C++基础】模板基础与函数模板
  4. 张建锋:一两年内,阿里巴巴100%的业务都会上公共云
  5. 假如王撕葱是程序员。。。
  6. selenium, firefox, python环境搭建指南
  7. python屏幕文字识别_学会python就是如此任性,15行代码搞定图片文字识别,附源码...
  8. 每个特征图1各因子和一个偏置_nlp中的概率图模型
  9. 项目中会用到的开源项目列表
  10. linux jar运行监控 mo,linux系统监控利器--monit
  11. SWPU第二届天梯选拔赛暨蓝桥杯训练赛题解
  12. 【JavaScript 封装库】BETA 2.0 测试版发布!
  13. 【语音合成】基于matlab两端音频合成【含Matlab源码 1490期】
  14. 工业机器人(10)-Matlab Robot Toolbox机械臂工作空间
  15. 使用YALMIP 求解LMI时遇到的问题
  16. 通用变频器的保护功能及故障处理
  17. Dubbo本地存根是什么,Dubbo本地伪装又是什么?
  18. Presto架构和使用总结
  19. Mac快速关闭当前窗口
  20. 鼠标右键转圈圈_鼠标点击右键后一直转圈圈

热门文章

  1. Pandas直接核算Excel中快递费用(自动化办公)
  2. ppt需要的图示、模板
  3. 单片机小精灵t2_51单片机的最小系统
  4. Python机器学习入门1.1《良、恶性乳腺肿瘤预测》
  5. Adreno GPU上的DirectX应用开发简介 (4)
  6. 计算机系统备份和还原的目的,电脑怎么一键还原系统(轻松一键系统备份与还原)...
  7. 黑盒测试方法(等价类划分法、边界值法、决策表、判定表、正交表、场景法、错误推断法)
  8. 【Windows服务删除“服务“】
  9. MPAndroidChart 教程:设置数据 Setting Data
  10. SUSE安全大揭秘之“十诫”