各位前辈,小弟参加了今年的电设省赛,作品中使用了stc89c52rc+与 爱宝 B-10条形码扫描器,
扫描枪通过ps/2接口与单片机相接。
使用外部中断0,关键管脚clk接P2.3,data脚接P3.0
现在遇到一个百思不得其解的问题,
就是
上电——》扫描一次——》错误条形码(一直错误,且每次显示相同)——》复位——》正确条形码(一直正确)
但是:
上电——》复位——》错误条形码(一直错误,且每次显示相同)
以下是程序,希望大家能帮忙想想为什么,在此先谢谢了
#include"reg52.h"
#define uchar unsigned char
#define uint unsigned int
sbit psdata = P3^0;
sbit psclk = P3^2;
uchar c[14]={0x39,0x39,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x31,0x32,0x33,0x34,0x35};
uchar numbit=0;
uchar keyv;
uchar key[42],a[14];
uchar keynum;
uchar i,j;
uchar relay=0;
void TEN_init ()
{
IT0 = 1; //外部中断下降沿触发
EX0 = 1; //外部中断0打开
EA = 1; //总中断打开
TMOD=0x20; //TMOD=0010 0000B,定时器T1工作于方式2
SCON=0x40; //SCON=0100 0000B,串口工作方式1 1起始位8数据位1停止位
PCON=0x00; //PCON=0000 0000B,波特率9600 晶振11.0592
TH1=0xfd; //根据规定给定时器T1赋初值
TL1=0xfd; //根据规定给定时器T1赋初值
TR1=1; //启动定时器T1
}
void main()
{
TEN_init();
while(1)
{
if(keynum==42)
{
j=0;
keynum=0;
for(i=0;i<42;i=i+3)
{
a[j]=key[i];
j++;
}
for(i=0;i<=13;i++)
{
switch(a[i]) //对ps/2编码进行转换
{
case 0x45:c[i]=48;break;
case 0x16:c[i]=49;break;
case 0x1e:c[i]=50;break;
case 0x26:c[i]=51;break;
case 0x25:c[i]=52;break;
case 0x2e:c[i]=53;break;
case 0x36:c[i]=54;break;
case 0x3d:c[i]=55;break;
case 0x3e:c[i]=56;break;
case 0x46:c[i]=57;break;
case 0x5a:c[i]=35;
}
}
for(i=0;i<14;i++) //串口输出
{
SBUF=c[i];
while(TI==0);
TI=0;
}
}
}
}
void int0 () interrupt 0 //进入外部中断0,进行条码数据读取
{
if( (numbit>0) && (numbit<9) )
{
keyv = keyv >> 1;
if(psdata)
keyv = keyv | 0x80;
}
numbit++;
if(numbit>10)
{
numbit = 0;
key[keynum] = keyv;
keynum++;
}
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>