📄 c程序.txt
字号:
#include <STC516.H>
#include <absacc.h>
#include <intrins.h> //_nop_();
#define Reg8255 XBYTE[0x8003]
#define Reg8255A XBYTE[0x8000]
#define Reg8255B XBYTE[0x8001]
#define Reg8255C XBYTE[0x8002]
#define uchar unsigned char
uchar con1ms=0,conkey=0,con=0,keyval=0,serval,f=0;
int con1s=0;
uchar led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar scan[]={0x80,0x40,0x08,0x04,0x20,0x10,0x02,0x01},datas[4];
struct
{
uchar sec;
uchar min;
}clk={0,0};
void Init_T(void)
{
TMOD=0x21;
TH0=0xF8;TL0=0xCC;
TH1=0xFA;TL1=0xFA;
TR0=1;TR1=1;
ET0=1;ET1=1;
}
void Init_UART(void)
{
SCON=0x50;
PCON=0x00;
TI=0;RI=0;
ES=1;
}
void Init(void)
{
Reg8255=0x89;Reg8255A=0x00;Reg8255B=0x00;Reg8255C=0xFF;
Init_T();Init_UART();
EA=1;
}
void display(uchar X,uchar B)
{
Reg8255A=0x00;
Reg8255B=0x00;
_nop_();_nop_();
Reg8255B=led[X];
Reg8255A=scan[B];
}
void CLK(uchar A)
{
datas[3]=clk.sec%10;
datas[2]=clk.sec/10;
datas[1]=clk.min%10;
datas[0]=clk.min/10;
_nop_();_nop_();
display(datas[A],A);
}
void keyscan(void)
{
uchar key;
key=(~Reg8255C)&0x0F;
if(key!=0)
{
while(((~Reg8255C)&0x0F)!=0) CLK(con1ms);
keyval=key;
}
}
void serput(void)
{
SBUF=clk.sec;
}
void serget(void)
{
if(serval==1) f=1;
if(serval==0) f=0;
}
void main(void)
{
Init();
while(1)
{
CLK(con1ms);
if(conkey==1)
{
keyscan();
conkey=0;
}
switch(keyval)
{
case 1: {serput();break;}
case 2: {serget();break;}
default : break;
}
}
}
void time_T0(void) interrupt 1
{
EA=0;
ET0=0;TR0=0;TH0=0xF8;TL0=0xCC;TR0=1;
con1ms++;con++;con1s++;
if(con1ms>3) con1ms=0;
if(con>99)
{
con=0;
conkey=1;
}
if(f==0)
if(con1s>999)
{
con1s=0;
clk.sec++;
if(clk.sec>59)
{
clk.sec=0;
clk.min++;
if(clk.min>59)
clk.min=0;
}
}
ET0=1;
EA=1;
}
void Serial(void) interrupt 4
{
if(TI==1) TI=0;
if(RI==1)
{
RI=0;serval=SBUF;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -