电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
P1 = (P1 & 0XF0) | i
已解决
73482
个问题
已帮助
5993
位优秀工程师
P1 = (P1 & 0XF0) | i
oh_耗子
2018-10-21
浏览量:1180
#include<reg51.h>
sbit keyout1 = P2^7;
sbit keyout2 = P2^6;
sbit keyout3 = P2^5;
sbit keyout4 = P2^4;
sbit keyin1 = P2^3;
sbit keyin2 = P2^2;
sbit keyin3 = P2^1;
sbit keyin4 = P2^0;
unsigned char code LED[] = {0xfc 0x60 0xda 0xf2 0x66 0xb9 0xbe 0xe0
0xfe 0xf6 0xee 0xfe 0x9c 0xfc 0x9e 0x8E};
unsigned char code keymap[4][4] = {{ 0x31 0x32 0x33 0x26 } //Êý×Ö¼ü1¡¢Êý×Ö¼ü2¡¢Êý×Ö¼ü3¡¢ÏòÉϼü
{ 0x34 0x35 0x36 0x25 } //Êý×Ö¼ü4¡¢Êý×Ö¼ü5¡¢Êý×Ö¼ü6¡¢Ïò×ó¼ü
{ 0x37 0x38 0x39 0x28 } //Êý×Ö¼ü7¡¢Êý×Ö¼ü8¡¢Êý×Ö¼ü9¡¢Ïòϼü
{ 0x30 0x1B 0x0D 0x27 } //Êý×Ö¼ü0¡¢ESC¼ü¡¢ »Ø³µ¼ü¡¢ ÏòÓÒ¼ü
};
unsigned char keysta[4][4] = {{1111}{1111}{1111}{1111}};
unsigned char Ledbuf[] = {0x00 0x00 0x00 0x00 0x000x000x000x00}; //ÊýÂë¹Ü¿ª¹ØÏû³ý¹íÓ°
void ShowNumber(unsigned long num);
void keyaction(unsigned char keycode);
void keydriver();
void keyscan();
void ledscan();
int main()
{
TMOD &= 0XF0;
TMOD |= 0X01;
TH0 = 0XFC;
TL0 = 0X18;
EA = 1;
ET0 = 1;
TR0 = 1;
Ledbuf[0] = LED[0];
while(1)
{
keydriver();
}
}
void ShowNumber(unsigned long num)
{
signed int a;
unsigned char buf[8];
for(a = 0; a < 8; a++)
{
buf[a] = num % 10;
num = num / 10;
}
for(a = 8; a >= 1; a--)
{
if(buf[a] == 0)
{
Ledbuf[a] = 0x00;
}
else
{
break;
}
for(; a >= 0; a--)
{
Ledbuf [a]= LED[buf[a]];
}
}
}
void keyaction(unsigned char keycode)
{
static unsigned char add;
static unsigned char result;
if((keycode >= 0x30) && (keycode <= 0x39))
{
add = (add * 10) + (keycode - 0x30); //°Ñ¼üÅÌÂë±ä³É
ShowNumber(add);
}
else if(keycode == 0x26)
{
result += add;
add = 0;
ShowNumber(result);
}
else if(keycode == 0x0d)
{
result += add;
add = 0;
ShowNumber(result);
}
else if(keycode == 0x1d)
{
result =0;
add = 0;
ShowNumber(add);
}
}
void keydriver()
{
unsigned char j i;
unsigned char backup[4][4] = {{1111}{1111}{1111}{1111}};
for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
{
if(keysta[i][j] != backup[i][j])
{
if(backup == 0)
{
keyaction(keymap[i][j]);
}
backup[i][j] = keysta[i][j];
}
//backup[i][j] = keysta[i][j];
}
}
void keyscan()
{
unsigned char i;
unsigned char keyout = 0;
static unsigned char keybuf[4][4] = {{0xff 0xff 0xff 0xff}
{0xff 0xff 0xff 0xff}
{0xff 0xff 0xff 0xff}
{0xff 0xff 0xff 0xff}
};
//¾ØÕó°´¼üɨÃ軺³å
//½«Ò»ÐÐËĸö°´¼üÖµÒÆÈ뻺³åÇø£¬Íê³ÉÏû¶¶
keybuf[keyout][0] = (keybuf[keyout][0] << 1) | keyin1;
keybuf[keyout][1] = (keybuf[keyout][1] << 1) | keyin2;
keybuf[keyout][2] = (keybuf[keyout][2] << 1) | keyin3;
keybuf[keyout][3] = (keybuf[keyout][3] << 1) | keyin4;
for(i = 0; i < 4; i++)
//ÿÐÐËĸö°´¼üËùÒÔÑ»·ËÄ´Î
{
if((keybuf[keyout][i] & 0x0f) == 0x00) //Á¬ÐøËÄ´ÎɨÃèÖµ¶¼ÊÇÁ㣬ËùÒÔ°´ÏÂ
{
keysta[keyout][i] = 0;
}
else if((keybuf[keyout][i] & 0x0f) == 0x0f)
{
keysta[keyout][i] = 1;
}
}
keyout++; //ÏÂÒ»ÐÐɨÃè
keyout &= 0x03; // ÖØпªÊ¼Ò»´ÎɨÃè
switch(keyout)
{
case 0: keyout4 = 1; keyout1 = 0; break;
case 1: keyout1 = 1; keyout2 = 0; break;
case 2: keyout2 = 1; keyout3 = 0; break;
case 3: keyout3 = 1; keyout4 = 0; break;
default: break;
}
}
void ledscan()
{
static unsigned char i = 0;
P0 = 0x00; //ÏûÒþ
//P1 = (P1 & 0XF0) | i;
P1 = 0XF0;
P0 = Ledbuf[i];
if(i < 8)
{
i++;
}
else
{
i = 0;
}
}
void InterruptTimer0() interrupt 1 //½øÈëÖжÏ1ms£¬Íê³É¼üÅ̵ÄɨÃèºÍÊýÂë¹ÜÏÔʾ
{
TH0 = 0XFC;
TL0 = 0X18;
keyscan();
ledscan();
}
为什么C51和C52执行上面的程序是两种结果
显示全部
单片机
关注问题
写回答
3
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
我对面的武器
芯片都不一样了,速度也不同,寄存器也有可能 不同了
发布于
2018-10-22
举报
评论 0
4
0
其他答案
数量:
10
Spirit
太长了
请描述下有什么不同。
发布于
2018-10-21
举报
评论 0
4
0
robe_zhang
硬件不同呗。
描述一下你的问题,这么长代码,看完也不知道不同的现象是什么
发布于
2018-10-21
举报
评论 0
4
0
yhj416606438
不太可能,是不是硬件问题,内核都一样的
发布于
2018-10-21
举报
评论 0
4
0
oh_耗子
主要是驱动数码管灯的顺序不一样
发布于
2018-10-22
举报
评论 0
4
0
donatello
C52的flash更大,定时器多了一个,这是唯一的区别,如果代码都一样的话效果应该是一样的。
发布于
2018-10-29
举报
评论 0
1
0
捷波
你要看下两个芯片用的晶振是否一致,不同的话,那么两者运行时的指令周期是不一样的,定时器的时间间隔也会不同。所以程序中与定时器相关的按键扫描都会受到影响。问题可能就出在这里。
发布于
2018-10-30
举报
评论 0
1
0
chen0000009
这个程序的执行结果应该是一样的,你看一下其它的电路连接是否还有不一致的地方
发布于
2018-11-06
举报
评论 0
0
0
小白爱32
如果代码一模一样,建议查看硬件原理图查找原因
发布于
2018-11-12
举报
评论 0
0
0
Harriet
这个要检查一下你的硬件问题,有可能是你的硬件的问题
发布于
2018-11-20
举报
评论 0
0
0
Reuben
一般都是你的硬件连接或者软件的配置问题,要在重点检查一下这两个的地方
发布于
2018-11-27
举报
评论 0
0
0
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
P1 = (P1 & 0XF0) | i
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: