📄 tetr.c
字号:
#include <c8051F320.h> //c8051F320SFR的C51格式头文件
#define uchar unsigned char
#define uint unsigned int
#define SYSCLK 24000000
#define uart_rate 19200
void Port_Init(void);
void Timer1_Init(void);
void Uart0_Init(void);
void transmitte (void);
void start(void);
void receive(void);
uchar code trdata1[]={"correct\r\n\0"};
uchar code trdata2[]={"wrong\r\n\0"};
uchar code *data point;
bit trans_next_ok;
uint flag;
uchar data rc[3];
bit rc_next_ok;
uint data m;
sbit BEEP = P3^0;
sbit LED_SEL = P1^7;
extern uchar data hour,minute,second;
void Port_Init(void)
{
XBR0 = 0x01; //uart的tx,rx分配至p0.4及p0.5
P0MDOUT |= 0x10; //uart的tx为推挽输出
XBR1 = 0x40; //使能交叉矩阵,弱上拉
//关闭音响和LED,对应新实验板,与仿真无关
BEEP = 0;
P2 = 0;
LED_SEL = 0;
LED_SEL = 1;
LED_SEL = 0;
LED_SEL = 1;
//
}
void Timer1_Init(void)
{
CKCON |= 0x02; //定时器1和2的触发时钟为 sysclk/48 = 0.5MHZ
CKCON &= ~0x08;
TMOD |= 0x20; //定时器1为模式2,8位自动重装
TMOD &= ~0x10;
TH1 = -((SYSCLK/48)/2)/uart_rate;//设置定时器1的重装值,-13,即0xf3
TR1 = 1; //启动定时器1
}
void Uart0_Init(void)
{
SCON0 |= 0x10; //8位数据,允许接收
//偶校验由软件实现
ES0 = 1; //允许UART中断
}
void Uart0_ISR(void) interrupt 4
{
if (RI0 == 1)
{
RI0 = 0;
rc[m] = SBUF0;
m++;
if(m==3)
{
rc_next_ok = 1;
m = 0;
}
}
if (TI0 == 1)
{
TI0 = 0;
trans_next_ok = 1;
}
}
void start(void)
{
if(flag==1) point=trdata1;
else point=trdata2;
flag = 0;
trans_next_ok =1;
}
void receive(void)
{
rc_next_ok = 0;
if(((rc[0]>>4)*10+(rc[0]&0x0f)<=23)&&((rc[1]>>4)*10+(rc[1]&0x0f)<=59)&&((rc[2]>>4)*10+(rc[2]&0x0f)<=59))
{
flag = 1;
EA = 0;
hour = rc[0];
minute = rc [1];
second = rc[2];
EA = 1;
}
else flag = 2;
}
void transmitte (void)
{
trans_next_ok = 0;
if (*point != '\0')
{
ACC = *point;
TB80 = P;
SBUF0 = ACC;
point++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -