📄 morepoint_telephone.c
字号:
#include "reg52.h"
#include "absacc.h"
#define uchar unsigned char
#define display_single XBYTE[0x0000]
#define display_point XBYTE[0x0100]
sbit key_1=P1^0;
sbit key_2=P1^1;
sbit key_3=P1^2;
sbit key_4=P1^3;
uchar code single[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xf0,0xc6};
uchar code single_point[9]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff};
uchar machine_text=0,machine_run=0,led_0=0,led_1=0,led_2=0,led_3=0,led_display=0;
uchar tem_buff[2];
void _nop()
{int i;
i=0;
}
void display(void)
{
display_single=single[led_0];
display_point=single_point[0];
_nop();
_nop();
display_point=0xff;
display_single=single[led_1];
display_point=single_point[1];
_nop();
_nop();
display_point=0xff;
display_single=single[led_2];
display_point=single_point[2];
_nop();
_nop();
display_point=0xff;
display_single=single[led_3];
display_point=single_point[3];
_nop();
_nop();
display_point=0xff;
display_single=single[0];
display_point=single_point[8];
_nop();
_nop();
display_point=0xff;
display_single=single[0];
display_point=single_point[8];
_nop();
_nop();
display_point=0xff;
display_single=single[0];
display_point=single_point[8];
_nop();
_nop();
display_point=0xff;
display_single=single[machine_text];
display_point=single_point[7];
_nop();
_nop();
display_point=0xff;
}
void time_again(int t)
{
int i;
while(t--)
for(i=0;i<10;i++)
display();
}
void time_delay(int t)
{
int i;
while(t--)
for(i=0;i<10;i++)
{
if((P1&0x0f)!=0x0f)
break;
display();
}
}
void reset(void)
{
TB8=0;
SBUF=0xff;
while(TI!=1);TI=0;
}
/***********************************************\
|发送地址子程序 |
| |
\***********************************************/
void setmessage(uchar address)
{
TB8=1;
SBUF=address;
while(TI!=1);TI=0;
while(RI!=1);RI=0;
if(SBUF!=address){reset();machine_text=0;machine_run=0;}
else
machine_text=address;
}
/***********************************************\
|发送命令子程序 |
| |
\***********************************************/
void set_command(uchar commd)
{
TB8=0;
SBUF=0x00;
while(TI!=1);TI=0;
while(RI!=1);RI=0; //是否忙
if((SBUF&0x01)!=0x01)
{reset();
machine_run=0;
machine_text=0;}
else
{ TB8=0;
SBUF=commd;
while(TI!=1);TI=0;
machine_run=commd; }
}
void key_function(void)
{
if((P1&0x0f)!=0x0f)
{
time_again(20);
if(key_1==0)
{
if(machine_text==0)
setmessage(0x01);
else
{switch(machine_text)
{ case 1:
set_command(0x01);
if(machine_run==0x01)
{led_0=10;led_1=10;led_2=10;led_3=10;}
break;
case 2:
set_command(0x01);
if(machine_run==0x01)
{
while(RI!=1);RI=0;
tem_buff[0]=SBUF;
while(RI!=1);RI=0;
tem_buff[1]=SBUF;
led_display=1;
}
break;
default:
break;
}
}
}
if(key_2==0)
{
if(machine_text==0)
setmessage(0x02);
else if(machine_text==1)
{
set_command(0x02);
if(machine_run==0x02){
led_0=11;led_1=11;led_2=11;led_3=11;
}
}
else if(machine_text==2)
{
set_command(0x02);
if(machine_run==0x02)
{
while(RI!=1);RI=0;
led_0=SBUF;
while(RI!=1);RI=0;
led_1=SBUF;
while(RI!=1);RI=0;
led_2=SBUF;
while(RI!=1);RI=0;
led_3=SBUF;
}
}
}
if(key_3==0)
{
if(machine_text==0)
setmessage(3);
else {set_command(0x03);
if(machine_run==0x03)
{led_0=0;led_1=0;led_2=0;led_3=0; }
}
}
if(key_4==0)
{
reset();
led_0=0;led_1=0;led_2=0;led_3=0;
machine_text=0;
machine_run=0;
}
}
while((P1&0x0f)!=0x0f)display();
}
void tmpchangebcd(void)
{ float a;
uchar c,d,f,e;
if(led_display==1)
{
uchar temp2,temp1;
temp1=tem_buff[0];
temp2=tem_buff[1];
c=temp2&0xf8;
if(c)
{temp1=~temp1+1;
temp2=~temp2;}
d=temp1&0x0f;
f=temp1>>4;
e=temp2&0x07;
e<<=4;
f|=e;
a=d*0.0625;
led_0=(uchar)(a*10);
led_1=f%10;
led_2=f%100/10;
led_3=f/100;
}
led_display=0;
}
void main(void)
{
TMOD=0x20;
TL1=0xfa;
TH1=0xfa;
PCON=0x00;
TR1=1;
SCON=0xd0;
machine_text=0;
machine_run=0;
while(1)
{
key_function();
time_delay(10);
tmpchangebcd();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -