找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2421|回复: 4
打印 上一主题 下一主题
收起左侧

求程序,哪位大神帮帮忙 利用51单片机设计一个4*4矩阵键盘

[复制链接]
跳转到指定楼层
楼主
ID:294610 发表于 2018-3-24 20:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
利用51单片机设计一个4*4矩阵键盘,当按下A时,显示学号后四位,当按下B时,显示DAC输出值(0-255),在B状态中,矩阵键盘值C与D调整显示的DAC值的十位,E与F调整DAC值的个位。
求助各位大神该怎么写程序,有没有类似的例子。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:82765 发表于 2018-3-24 21:09 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

板凳
ID:111634 发表于 2018-3-24 21:44 | 只看该作者
也就是普通的4*4矩阵键盘,不过是显示内容不同而已而已而已!愿显示什么就去显示好了!
回复

使用道具 举报

地板
ID:296540 发表于 2018-3-24 22:21 | 只看该作者
#include<reg51.h>
#define uchar uns igned char
#define uint unsigned int
void main(void)
{
uchar key;
while(1)  //调用键盘扫描函数,返回的键值送到变量key
{
key= keyscan( );
//延时
delay( );
}
void delay10ms (void) ;
//延时函数
{
uchar i;
for(i=0;i<200;i++){ }
}
//键盘扫描函数
uchar key scan (void)
{
//行扫描值
uchar code h;
//列扫描值
uchar code 1;
//P1.0~P1.3行线输出都为0,准备读列状态
P1=0xf0;
if((P1&f0) !=0xf0)
{
//如果P1.4~P1.7 不全为1,可能有键按下
//延时去抖动,延时函数参见例5-11
delay10ms (void) ;
//重读P1.4~P1.7,若还是不全为1,定有键按下
if( (P1&f0) !=0xf0)
// P1.0 行线置为0,开始行扫描
code h=0xfe;
while ((code_h&0x10) !=0xf0) ;//判断是否扫描到最后一行,若不是,继续扫描
{
//P1口输出行扫描值
P1= code h;
if( (P1&f0) !=0xf0) ;
{
//如果P1.4~P1.7 不全为1,该行有键按下
code_l=(P1&0xf010x0f) ;//保留P1口高4 位,低4 位变为1,作为列值
return( (~code_h )+ (~code_l) ); //键值=行扫描值+列扫描值,键值返主程序
/ /若该行无键按下,往下执行
}
else
code h= (code_h<<1) 10x01;
/行扫描值左移,准备扫描下一行
}}}
//无键按下,
return (0);}
返回0

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:294610 发表于 2018-3-24 23:06 | 只看该作者
cjjcjj1 发表于 2018-3-24 21:09
你好!这个程序要求比较奇怪。。。肯定没有现成的;
还有 DA 用的什么芯片?是实物还是仿真?

用的是DAC0832,是进行仿真的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表