📄 51.c
字号:
#include <AT89X51.H>
#define uchar unsigned char
#define uint unsigned int
bit biaozhi;
//*************************************************
//AT89C2051 ADC0809 CAI JI---ZHU JI
//*************************************************
// p2.0 you bian di 4 lie you dian zu
// p2.1 you bian di 3 lie
// p2.2 you bian di 2 lie
// p2.3 you bian di 1 lie
// p2.4 shang bian di 1 hang
// p2.5 shang bian di 2 hang
// p2.6 shang bian di 3 hang
// p2.7 shang bian di 4 hang
//*************************************************
// P3.2 int0 zhong duan an jian
//*************************************************
// 1 b7h; a b0h;
// 2 c2h; b 8ch;
// 3 92h; c c9h;
// 4 b4h; d 86h;
// 5 98h; e c8h;
// 6 88h; f e8h;
// 7 b3h; 8 80h;
// 9 90h; 0 81h;
//*************************************************
sbit a0=ACC^0; sbit a1=ACC^1; sbit a2=ACC^2; sbit a3=ACC^3;
sbit a4=ACC^4; sbit a5=ACC^5; sbit a6=ACC^6; sbit a7=ACC^7;
//*************************************************
void delay (uchar t) //延时子程序
{ uchar s;
while (t--)
{for (s=0xff;s>0;s--)
{;}
}
}
//*************************************************
void show(uchar h) //P1.0,P1.1模拟串行口使数码管显示
{ ACC=h;
P1_0=a0;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
P1_0=a1;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
P1_0=a2;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
P1_0=a3;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
P1_0=a4;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
P1_0=a5;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
P1_0=a6;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
P1_0=a7;P1_1=0;P1_1=1; //P1.0 wei shu jv p1.1 wei shi zhong
}
//*************************************************
void tuichu(void) interrupt 0 using 0
{
biaozhi=1;
show(0xff); show(0x8e); show(0x8f); show(0xcc);
delay(0xff);
show(0xff); show(0xff); show(0xff); show(0xff);
}
//*************************************************
uchar yima(uchar d) //16进制码转换成可供数码管显示的码值
{ switch (d)
{case 0x00:{d=0x81;}break; //xian 0
case 0x01:{d=0xb7;}break; //xian 1
case 0x02:{d=0xc2;}break; //xian 2
case 0x03:{d=0x92;}break; //xian 3
case 0x04:{d=0xb4;}break; //xian 4
case 0x05:{d=0x98;}break; //xian 5
case 0x06:{d=0x88;}break; //xian 6
case 0x07:{d=0xb3;}break; //xian 7
case 0x08:{d=0x80;}break; //xian 8
case 0x09:{d=0x90;}break; //xian 9
case 0x0a:{d=0xb0;}break; //xian a
case 0x0b:{d=0x8c;}break; //xian b
case 0x0c:{d=0xc9;}break; //xian c
case 0x0d:{d=0x86;}break; //xian d
case 0x0e:{d=0xc8;}break; //xian e
case 0x0f:{d=0xe8;}break; //xian f
default:{d=0xff;};
}
return (d);
}
//*************************************************
uchar jianma(uchar a) //按键特征码转换成16进制码
{ switch (a)
{case 0x11:{a=0x00;}break;
case 0x12:{a=0x04;}break;
case 0x14:{a=0x08;}break;
case 0x18:{a=0x0c;}break;
case 0x21:{a=0x01;}break;
case 0x22:{a=0x05;}break;
case 0x24:{a=0x09;}break;
case 0x28:{a=0x0d;}break;
case 0x41:{a=0x02;}break;
case 0x42:{a=0x06;}break;
case 0x44:{a=0x0a;}break;
case 0x48:{a=0x0e;}break;
case 0x81:{a=0x03;}break;
case 0x82:{a=0x07;}break;
case 0x84:{a=0x0b;}break;
case 0x88:{a=0x0f;}break;
default:{a=0xff;}
}
return (a);
}
//*************************************************
uchar kbscan(void) //键盘扫描子程序
{ uchar sccode,recode,e;
P2=0x0f;
if ((P2&0x0f)!=0x0f) //you jian an xia
{for (e=240;e>0;e--);
if ((P2&0x0f)!=0x0f) //yun you jian an xia
{sccode=0x7f; //zhu hang sao miao chu zhi
while ((sccode&0x08)!=0) //xun huan sao miao
{P2=sccode;
if ((P2&0x0f)!=0x0f) //ben hang you jian an xia
{recode=(P2&0x0f)|0xf0;
return ((~sccode)+(~recode)); //fan hui jian ma
}
else
sccode=(sccode>>1)|0x80; //zuo yi yi wei
}
}
}
return (0);
}
//*************************************************
void bcd(uchar ad) //16进制数转换成BCD码
{uchar a,b,c,t;
a=ad/100;
t=ad%100;
b=t/10;
c=t%10;
a=yima(a); b=yima(b); c=yima(c);
show(0x81); show (a); show (b); show (c);
}
//*************************************************
uchar ad(void) //AD转换子程序
{uchar ad;
P3=0xff;
P3_6=1; P3_6=0; P3_6=1;
delay(0x07);
P3_7=0;
ad=P0;
return (ad);
}
//*************************************************
void txd(uchar z) //串口发送子程序
{ TMOD=0X20;
TL1=0xfd;TH1=0xfd; //256-11059200/384/9600=0xfd
SCON=0x50;PCON=0x00; //fang shi 1
TR1=1;IE=0x81; //ji shu qi
SBUF=z;
while (TI==0); //wei 0 deng dai
TI=0;
}
//*************************************************
uchar rxd(void) //串口接收子程序
{ uchar x;
TMOD=0X20;
TL1=0xfd;TH1=0xfd; //256-11059200/384/9600=0xfd
SCON=0x50;PCON=0x00; //fang shi 1
TR1=1;IE=0x81; //ji shu qi
while (RI==0)
{if (biaozhi!=0) break;}
RI=0;
x=SBUF;
return (x);
}
//*************************************************
void rtxd2start(void)
{IE=0x81; //cpu kai zhong duan,in0 kai zhong duan
SCON=0x90;PCON=0x00; //fang shi 2
}
//*************************************************
void txd2(uchar z) //way 2 txd
{ SCON=0x90;PCON=0x00;IE=0x81; //fang shi 2
ACC=z;TB8=P;
SBUF=z;
while (TI==0); //wei 0 deng dai
TI=0;
}
//*************************************************
uchar rxd2(void) //way 2 rxd
{ uchar z;
SCON=0x90;PCON=0x00;IE=0x81; //fang shi 2
while (RI==0)
{if (biaozhi!=0) break;}
RI=0;
z=SBUF;
ACC=z; if (TB8==P) {return (z);}
return (0x00);
}
//*************************************************
void adxs(void)
{uchar a;
biaozhi=0;
IE=0x81; //cpu kai zhong duan,in0 kai zhong duan
while (biaozhi==0)
{a=ad();
bcd(a);
txd(a);
delay(0x29);
}
}
//*************************************************
void rxdxs()
{uchar r;
biaozhi=0;
IE=0x81; //cpu kai zhong duan,in0 kai zhong duan
while (biaozhi==0)
{r=rxd();
bcd(r);
}
}
//*************************************************
void rxdxs2(void)
{uchar r;
biaozhi=0;
IE=0x81; //cpu kai zhong duan,in0 kai zhong duan
while (biaozhi==0)
{r=rxd2();
if (r!=0x00) {bcd(r);}
else {show(0xc8); show(0xff); show(0xff); show(0xff);}
}
}
//*************************************************
void txdxs(void)
{uchar t;
biaozhi=0;
IE=0x81; //cpu kai zhong duan,in0 kai zhong duan
while (biaozhi==0)
{for (t=255;t>0;t--)
{txd(t);
bcd (t);
delay(0x70);
if (biaozhi!=0) break;
}
}
}
//*************************************************
void txdxs2()
{uchar t;
IE=0x81; //cpu kai zhong duan,in0 kai zhong duan
rtxd2start();
biaozhi=0;
while (biaozhi==0)
{for (t=255;t>1;t--)
{bcd (t);
txd2(t);
delay(0x70);
if (biaozhi!=0) break;
}
}
}
//#################################################
main ()
{uchar key; uchar jian; uchar led;
//*****************************************
IE=0x81; show(0xff); show(0xff); show(0xff); show(0xff);
while (1)
{key=kbscan();
if (key!=0)
{P1_2=0; P1_3=0; P1_4=0;
P1_5=0; P1_6=0; P1_7=0;
//*****************************************
while ((P2&0x0f)!=0x0f) //you jian an xia
{P3_5=0;
P3_6=0;}
P3_5=1; P3_6=1;
//*****************************************
P1_2=1; P1_3=1; P1_4=1;
P1_5=1; P1_6=1; P1_7=1;
//*****************************************
jian=jianma(key); txd(jian);
led=yima(jian); show(led);
}
switch (jian)
{ case 0x0b : {jian=0x00;rxdxs2();}break;
case 0x0c : {jian=0x00;adxs(); }break;
case 0x0d : {jian=0x00;rxdxs();}break;
case 0x0e : {jian=0x00;txdxs();}break;
case 0x0f : {jian=0x00;txdxs2(); }break;
default : {jian=0x00;}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -