初入单片机遇到一些问题

蓝兔先生 2016-07-29 01:03:57
废物先不说, 上图上代码才能有图有真相

#include <reg51.h>
#include "../time/Delay.h"

// 定义矩阵键盘I/O P2 口控制矩阵键盘
#define GPIO_KEY P2

// 定义静态数码管变量
#define GPIO_DIG P0
unsigned char code GPIO_S[6] = {0x3F, 0x06, 0x59, 0x4F, 0x67, 0x6D};
// ~ 0 1 2 3 4 5


void main()
{
unsigned char KeyValue;
GPIO_KEY = 0x0F;
while (1)
{
if (GPIO_KEY != 0x0F)
{
DelayMs_24M(10);
if (GPIO_KEY != 0x0F)
{
// 测试列
switch(GPIO_KEY)
{
case 0x07 : KeyValue = 0; break;
case 0x0B : KeyValue = 1; break;
case 0x0D : KeyValue = 2; break;
case 0x0E : KeyValue = 3; break;
}

// 测试行
GPIO_KEY = 0xF0;
switch(GPIO_KEY)
{
case 0x70 : break;
case 0xB0 : KeyValue = KeyValue + 4; break;
case 0xD0 : KeyValue = KeyValue + 8; break;
case 0xE0 : KeyValue = KeyValue + 12; break;
}

// 根据按下的按钮在静态数码管中显示对应数字
switch(KeyValue)
{
case 0x07 : GPIO_DIG = ~GPIO_S[0]; break;
}
}
}
}
}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是板子的接线图




--------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------------
下面是电路原理图



--------------------------------------------------------------------------------------------------------------------------------------------------------------------



整个实验效果:按下矩阵键盘中的一个键然后静态数码管中显示一个数字
目前程序状况:按下矩阵键盘中的任意一个键,然后,然后就没有然后了



看在新手和上帝的份上, 各路大神帮我解答下吧
...全文
793 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
phangbob 2016-09-07
  • 打赏
  • 举报
回复
GPIO_KEY = 0x0F; while (1) 上面那句应该在while(1)里面。。。 然后数码管亮加个延时。。。 其他的需要下载调试看看。能力有限。。哈哈
qq_29559327 2016-08-01
  • 打赏
  • 举报
回复
普中单片机板子,和我的一模一样
dceacho 2016-07-30
  • 打赏
  • 举报
回复
switch(KeyValue)
 {
 case 0x07 : GPIO_DIG = ~GPIO_S[0]; break;
 }
你按对了按键?把P0赋个初始值
单片机原理及应用实验报告(中北大学大数据学院) 啊哈,需要用到proteus的可能要根据自己的情况修改一下,换了机子可能就不能运行。。。 实验一 简单程序设计 1. 学会实验系统的使用,掌握KEIL软件仿真与调试方法。 2. 编制一个计算x=a2+b2 3. 验证上述结果的正确 实验二 程序设计 1.将内部RAM中起始地址为data的数据串串送到外部RAM中起始地址为buffer的存储区域中,直到发现‘$’字符 2.计算双字节无符号数的乘法R0R1R2R3=R4R5*R6R7,计算1234*5678的值。要求乘法程序用子程序实现。 实验三 中断实验 1.将微动开关接到INT0,P1口接到8个发光二极管,利用外部中断电平触发方式,每按一次微动开关,使得发光二极管显示的二进制数字加1 2.将微动开关接到INT0,P1口接到8个发光二极管,利用外部中断下降沿触发方式,每按一次微动开关,使得发光二极管显示的二进制数字加1 3.体会两种不同触发类型中断的区别。 实验四 定时器实验 1.将P1口接到8个发光二极管 2.编程使得发光二极管显示的二进制数,每一秒加1 3.将微动开关接到T0,利用计数器功能,每按一次微动开关,使得发光二极管显示的二进制数字加1 4.可考虑采用计数器的不同工作模式 5.验证上述操作的正确性,对实验结果进行解释 实验五 存储器扩展使用 1. 利用试验箱中的器件,给单片机扩展一片随机读写存储器 2. 确定扩展的存储器的地址范围 3. 编写程序,将扩展的存储器中填写内容,每个单元中填写其地址码低8位的“非值” 4. 验证扩展存储器的可用性 5. 对实验结果进行说明 实验六 接口实验 1. 连接实验箱上的数码管,编程在上面显示数字2017 2. 连接实验箱上的键盘和数码管,编写程序,将键盘输入值写在数码管的最右端,原来的数值,向左端移动。 3. 输入多次的情况 实验七 综合实验 1. 连接实验箱上的键盘和数码管 2. 编程,将实验箱做成一个能显示时间的电子表 3. 该表能修改时间 4. AD实验,通过AD转换器,显示当前的输入电压值,要求精确到小数点后2位数(选做)

27,518

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧