📄 5g14433.c
字号:
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar bdata result1;
uchar bdata result2;
sbit flag0=result1^7; //定义在位寻址区,表示结果正负、一位千位数、百位四位BCD码
sbit thou=result1^4; //表示四位十位BCD、四位个位BCD
sbit ds1=P1^4; //千位选通位
sbit ds2=P1^5; //百位选通位
sbit ds3=P1^6; //十位选通位
sbit ds4=P1^7; //个位选通位
sbit q0=P1^0; //结果BCD码输出位
sbit q1=P1^1;
sbit q2=P1^2;
sbit q3=P1^3;
void main()
{
uchar m;
bit flag1; //过量程及欠量程标志位
m=0x00;
result1=0x00;
result2=0x00;
for(;;)
{
if(!ds1) continue; //如果ds1=0,则千位未选通,等待
else break; //若ds1=1,千位选通,跳出循环
}
if(q0) goto loop; //若q0=1,表示过欠量程,标志置1结束
else flag1=0;
if(q2) flag0=0; //若q2=1,表示结果为正数,符号位为0
else flag0=1;
if(q3) thou=0; //若q3=1,表示千位数为0
else thou=1;
for(;;)
{
if(!ds2) continue; //判断百位是否选通
else break;
}
m=P1; //将百位BCD码送入result1低4位
m=m&0x0f;
result1=result1|m;
for(;;) //判断十位是否选通
{
if(!ds3) continue;
else break;
} //将十位BCD码送入result2高四位
m=0x00;
m=P1;
m=m<<4;
result2=m;
for(;;) //判断个位是否选通
{
if(!ds4) continue;
else break;
}
m=0x00; //将个位BCD码送入result2低4位
m=P1;
m=m&0x0f;
result2=result2|m;
loop:
flag1=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -