⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tetr.c

📁 实现了led数码管的显示
💻 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 + -