MPLAB编译时出现的问题,请指教!
时间:10-02
整理:3721RD
点击:
#include<pic.h>
#define DAT 1
#define CMD 0
#define LINE1 0b10000000
#define LINE2 0b11000000
#define uint unsigned int
__CONFIG(0x20F1);
void Initial();
void DELAY_10US(unsigned char R1,unsigned char FLAG);
//void delay(unsigned char R1,unsigned char FLAG);//延时
//void jisuan();//计算
void rest();//复位
void scan();//扫描
void display1();//显示第一行
void display2();//显示第二行
unsigned char h,l,key0,fuhao,gw,sw,bw,qw;//对应横,列,按下键,对应数,结果的个位,十位,百位,千位
unsigned int a,b,jieguo;
const unsigned key[4][4]={1,2,3,13,4,5,6,12,7,8,9,11,21,0,20,10}; //?
void main()
{
Init();//初始化
while(1)
{
while(RBIF==0)
scan();//扫描
display1();//显示第一行
//jisuan();//计算
display2(); //显示第二行
}
}
void delay(uint x)//延时
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void initial()
{
TRISA=0X80;//10000000,RA7输入接CLKIN,RA6输出接CLKOUT
TRISB=0XCF;//11001111,RB7,RB6接输入,RB0~RB3接输入
TRISC=0X00;//00000000,RC端口均输出
TRISD=0X00;//00000000,RD高四位输出
RE3=0;//复位
PORTA=0;//A端口置0
PORTB=0;//B端口置0
PORTC=0;//C端口置0
PORTD=0;//D端口置0
}
void scan(void)//键盘扫描
{
delay(20);//延时20ms,等待震荡结束
RBIF=0;//清楚标志位
if(PORTB==0XcF)//如果RB的值没有变化,则刚刚的中断时一个干扰,则返回主程序
return;
TRISB=0xc0;//下输入,即RB0~RB3输入
PORTD=0Xf0;//再次设置下检查行的I/O方式
if(RD4==0);h=0;//确定行
if(RD5==0);h=1;//确定行
if(RD6==0);h=2;//确定行
if(RD7==0);h=3;//确定行
TRISD=0x00;//左输入,即RD4~RD7向外输出
PORTB=0Xcf;//再次设置下检查行的I/O方式
if(RB3==0);l=0;//确定列
if(RB2==0);l=1;//确定列
if(RB1==0);l=2;//确定列
if(RB0==0);l=3;//确定列
TRISB=0xc0;
PORTD=0Xf0;//还原至检查行的状态
key0=key[h][l];//通过查数组,把之前检测到的位置变成具体的数字或者符号
if(key0<21)
display1();//显示刚才扫描到的符号
if(key0<10)//确定数字
{
if(fuhao==0)
a=a*10+key0;//若是无符号的数字,则赋值给a
else b=b*10+key0;//若有符号,则赋值给b
}
}
这是我写的部分程序,不知道为什么会出现如图所示的问题,新手请指教!
#define DAT 1
#define CMD 0
#define LINE1 0b10000000
#define LINE2 0b11000000
#define uint unsigned int
__CONFIG(0x20F1);
void Initial();
void DELAY_10US(unsigned char R1,unsigned char FLAG);
//void delay(unsigned char R1,unsigned char FLAG);//延时
//void jisuan();//计算
void rest();//复位
void scan();//扫描
void display1();//显示第一行
void display2();//显示第二行
unsigned char h,l,key0,fuhao,gw,sw,bw,qw;//对应横,列,按下键,对应数,结果的个位,十位,百位,千位
unsigned int a,b,jieguo;
const unsigned key[4][4]={1,2,3,13,4,5,6,12,7,8,9,11,21,0,20,10}; //?
void main()
{
Init();//初始化
while(1)
{
while(RBIF==0)
scan();//扫描
display1();//显示第一行
//jisuan();//计算
display2(); //显示第二行
}
}
void delay(uint x)//延时
{
uint a,b;
for(a=x;a>0;a--)
for(b=110;b>0;b--);
}
void initial()
{
TRISA=0X80;//10000000,RA7输入接CLKIN,RA6输出接CLKOUT
TRISB=0XCF;//11001111,RB7,RB6接输入,RB0~RB3接输入
TRISC=0X00;//00000000,RC端口均输出
TRISD=0X00;//00000000,RD高四位输出
RE3=0;//复位
PORTA=0;//A端口置0
PORTB=0;//B端口置0
PORTC=0;//C端口置0
PORTD=0;//D端口置0
}
void scan(void)//键盘扫描
{
delay(20);//延时20ms,等待震荡结束
RBIF=0;//清楚标志位
if(PORTB==0XcF)//如果RB的值没有变化,则刚刚的中断时一个干扰,则返回主程序
return;
TRISB=0xc0;//下输入,即RB0~RB3输入
PORTD=0Xf0;//再次设置下检查行的I/O方式
if(RD4==0);h=0;//确定行
if(RD5==0);h=1;//确定行
if(RD6==0);h=2;//确定行
if(RD7==0);h=3;//确定行
TRISD=0x00;//左输入,即RD4~RD7向外输出
PORTB=0Xcf;//再次设置下检查行的I/O方式
if(RB3==0);l=0;//确定列
if(RB2==0);l=1;//确定列
if(RB1==0);l=2;//确定列
if(RB0==0);l=3;//确定列
TRISB=0xc0;
PORTD=0Xf0;//还原至检查行的状态
key0=key[h][l];//通过查数组,把之前检测到的位置变成具体的数字或者符号
if(key0<21)
display1();//显示刚才扫描到的符号
if(key0<10)//确定数字
{
if(fuhao==0)
a=a*10+key0;//若是无符号的数字,则赋值给a
else b=b*10+key0;//若有符号,则赋值给b
}
}
这是我写的部分程序,不知道为什么会出现如图所示的问题,新手请指教!