pic18f4520单片机c语言编程 程序问题

我用c语言编写的键盘控制一位数码管显示程序如下:#include<p18cxxx.h>#include"top.h"voidmain(void){constunsigne... 我用c语言编写的键盘控制一位数码管显示程序如下:
#include<p18cxxx.h>
#include"top.h"

void main (void)
{
const unsigned char SE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,
0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
TA1=0;
PA1=1;
TD=0;
PB=0b11111111;
TB=0b11111111;
PD=SE[0];
while(1)
{
if (PPB2==0) PD=SE[1];
if (PPB4==0) PD=SE[2];
if (PPB5==0) PD=SE[3];
}
}

头文件如下:
#define TA1 DDRAbits.RA1
#define PA1 PORTAbits.RA1
#define TD TRISD
#define PD PORTD
#define TB TRISB
#define PB PORTB
#define PPB0 PORTBbits.RB0
#define PPB2 PORTBbits.RB2
#define PPB4 PORTBbits.RB4
#define PPB5 PORTBbits.RB5

说明:
数码管显示用PA及PD控制,这里没有问题,PPB2、4、5管脚设为输入,检测高低电平。
问题:
只有PP5按键按下的时候,显示正常,PPB2和4不管怎么设都检测为低电平,万用标检测2、4管脚有4.8v电压,按下后0.6v电压,没有问题。软件仿真2、4管脚始终为0,不知什么原因。
展开
 我来答
若以下回答无法解决问题,邀请你更新回答
yuwenchenglo
2013-08-04 · 超过27用户采纳过TA的回答
知道答主
回答量:113
采纳率:0%
帮助的人:78.2万
展开全部
PB=0b11111111; 在keilc中怎么这样赋值啊 赋值应该是0XFF吧
更多追问追答
追问
我是过,这两种方法都能识别,之前其他程序都验证过了,这个没问题
追答
单片机上电是高电平 按下与地连了所以低了  2 4按下显示不正常是什么不正常  调用se时候给的值没对应相应的数码管?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
晓风明月在路上
2013-08-03
知道答主
回答量:19
采纳率:0%
帮助的人:9.4万
展开全部
PB=0b11111111;

这是什么意思?这句话有问题吧
追问
其实把PB=0b11111111去掉还是有这个问题。我先把数据寄存器内的内容输入为1,软件检测RB内容为竟然是0b11100000而不是0b11111111,不知道为什么直接给数据1,RB0~4都为0。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一万光年MEGn0
2013-08-05 · TA获得超过3713个赞
知道大有可为答主
回答量:4602
采纳率:67%
帮助的人:1127万
展开全部
开关S3是不是拨到ON了? 那样的话就与地相接了 ,就是0了。
追问
s3的四个开关都关掉了,万用表测没有短路,测片子的管脚电压开始都为高,按下sw开关后也都为低,但就是只有sw3单片机才识别高低电平。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式