【一些学习51单片机用到的小工具】

一些学习51单片机用到的小工具

void Delay(unsigned int xms)
{
	unsigned char i, j;
	while(xms--)
	{
		i = 2;
		j = 239;
		do
		{
			while (--j);
		} while (--i);
	}
}
#ifndef __DELAY_H__
#define __DELAY_H__

void Delay(unsigned int xms);

#endif
#include <REGX52.H>

//寮曡剼瀹氫箟
sbit DS1302_SCLK=P3^6;
sbit DS1302_IO=P3^4;
sbit DS1302_CE=P3^5;

//瀵勫瓨鍣ㄥ啓鍏ュ湴鍧€/鎸囦护瀹氫箟
#define DS1302_SECOND		0x80
#define DS1302_MINUTE		0x82
#define DS1302_HOUR			0x84
#define DS1302_DATE			0x86
#define DS1302_MONTH		0x88
#define DS1302_DAY			0x8A
#define DS1302_YEAR			0x8C
#define DS1302_WP			0x8E

//鏃堕棿鏁扮粍锛岀储寮?~6鍒嗗埆涓哄勾銆佹湀銆佹棩銆佹椂銆佸垎銆佺銆佹槦鏈?
unsigned char DS1302_Time[]={19,11,16,12,59,55,6};

/**
  * @brief  DS1302鍒濆鍖?
  * @param  鏃?
  * @retval 鏃?
  */
void DS1302_Init(void)
{
	DS1302_CE=0;
	DS1302_SCLK=0;
}

/**
  * @brief  DS1302鍐欎竴涓瓧鑺?
  * @param  Command 鍛戒护瀛?鍦板潃
  * @param  Data 瑕佸啓鍏ョ殑鏁版嵁
  * @retval 鏃?
  */
void DS1302_WriteByte(unsigned char Command,Data)
{
	unsigned char i;
	DS1302_CE=1;
	for(i=0;i<8;i++)
	{
		DS1302_IO=Command&(0x01<<i);
		DS1302_SCLK=1;
		DS1302_SCLK=0;
	}
	for(i=0;i<8;i++)
	{
		DS1302_IO=Data&(0x01<<i);
		DS1302_SCLK=1;
		DS1302_SCLK=0;
	}
	DS1302_CE=0;
}

/**
  * @brief  DS1302璇讳竴涓瓧鑺?
  * @param  Command 鍛戒护瀛?鍦板潃
  * @retval 璇诲嚭鐨勬暟鎹?
  */
unsigned char DS1302_ReadByte(unsigned char Command)
{
	unsigned char i,Data=0x00;
	Command|=0x01;	//灏嗘寚浠よ浆鎹负璇绘寚浠?
	DS1302_CE=1;
	for(i=0;i<8;i++)
	{
		DS1302_IO=Command&(0x01<<i);
		DS1302_SCLK=0;
		DS1302_SCLK=1;
	}
	for(i=0;i<8;i++)
	{
		DS1302_SCLK=1;
		DS1302_SCLK=0;
		if(DS1302_IO){Data|=(0x01<<i);}
	}
	DS1302_CE=0;
	DS1302_IO=0;	//璇诲彇鍚庡皢IO璁剧疆涓?锛屽惁鍒欒鍑虹殑鏁版嵁浼氬嚭閿?
	return Data;
}

/**
  * @brief  DS1302璁剧疆鏃堕棿锛岃皟鐢ㄤ箣鍚庯紝DS1302_Time鏁扮粍鐨勬暟瀛椾細琚缃埌DS1302涓?
  * @param  鏃?
  * @retval 鏃?
  */
void DS1302_SetTime(void)
{
	DS1302_WriteByte(DS1302_WP,0x00);
	DS1302_WriteByte(DS1302_YEAR,DS1302_Time[0]/10*16+DS1302_Time[0]%10);//鍗佽繘鍒惰浆BCD鐮佸悗鍐欏叆
	DS1302_WriteByte(DS1302_MONTH,DS1302_Time[1]/10*16+DS1302_Time[1]%10);
	DS1302_WriteByte(DS1302_DATE,DS1302_Time[2]/10*16+DS1302_Time[2]%10);
	DS1302_WriteByte(DS1302_HOUR,DS1302_Time[3]/10*16+DS1302_Time[3]%10);
	DS1302_WriteByte(DS1302_MINUTE,DS1302_Time[4]/10*16+DS1302_Time[4]%10);
	DS1302_WriteByte(DS1302_SECOND,DS1302_Time[5]/10*16+DS1302_Time[5]%10);
	DS1302_WriteByte(DS1302_DAY,DS1302_Time[6]/10*16+DS1302_Time[6]%10);
	DS1302_WriteByte(DS1302_WP,0x80);
}

/**
  * @brief  DS1302璇诲彇鏃堕棿锛岃皟鐢ㄤ箣鍚庯紝DS1302涓殑鏁版嵁浼氳璇诲彇鍒癉S1302_Time鏁扮粍涓?
  * @param  鏃?
  * @retval 鏃?
  */
void DS1302_ReadTime(void)
{
	unsigned char Temp;
	Temp=DS1302_ReadByte(DS1302_YEAR);
	DS1302_Time[0]=Temp/16*10+Temp%16;//BCD鐮佽浆鍗佽繘鍒跺悗璇诲彇
	Temp=DS1302_ReadByte(DS1302_MONTH);
	DS1302_Time[1]=Temp/16*10+Temp%16;
	Temp=DS1302_ReadByte(DS1302_DATE);
	DS1302_Time[2]=Temp/16*10+Temp%16;
	Temp=DS1302_ReadByte(DS1302_HOUR);
	DS1302_Time[3]=Temp/16*10+Temp%16;
	Temp=DS1302_ReadByte(DS1302_MINUTE);
	DS1302_Time[4]=Temp/16*10+Temp%16;
	Temp=DS1302_ReadByte(DS1302_SECOND);
	DS1302_Time[5]=Temp/16*10+Temp%16;
	Temp=DS1302_ReadByte(DS1302_DAY);
	DS1302_Time[6]=Temp/16*10+Temp%16;
}
```c
#ifndef __DS1302_H__
#define __DS1302_H__

//澶栭儴鍙皟鐢ㄦ椂闂存暟缁勶紝绱㈠紩0~6鍒嗗埆涓哄勾銆佹湀銆佹棩銆佹椂銆佸垎銆佺銆佹槦鏈?
extern unsigned char DS1302_Time[];

void DS1302_Init(void);
void DS1302_WriteByte(unsigned char Command,Data);
unsigned char DS1302_ReadByte(unsigned char Command);
void DS1302_SetTime(void);
void DS1302_ReadTime(void);

#endif
```c
#include <REGX52.H>
#include "Delay.h"

/**
  * @brief  鑾峰彇鐙珛鎸夐敭閿爜
  * @param  鏃?
  * @retval 鎸変笅鎸夐敭鐨勯敭鐮侊紝鑼冨洿锛?~4锛屾棤鎸夐敭鎸変笅鏃惰繑鍥炲€间负0
  */
unsigned char Key()
{
	unsigned char KeyNumber=0;
	
	if(P3_1==0){Delay(20);while(P3_1==0);Delay(20);KeyNumber=1;}
	if(P3_0==0){Delay(20);while(P3_0==0);Delay(20);KeyNumber=2;}
	if(P3_2==0){Delay(20);while(P3_2==0);Delay(20);KeyNumber=3;}
	if(P3_3==0){Delay(20);while(P3_3==0);Delay(20);KeyNumber=4;}
	
	return KeyNumber;
}
```c
#ifndef __KEY_H__
#define __KEY_H__

unsigned char Key();

#endif
```c
#include <REGX52.H>

//寮曡剼閰嶇疆锛?
sbit LCD_RS=P2^6;
sbit LCD_RW=P2^5;
sbit LCD_EN=P2^7;
#define LCD_DataPort P0

//鍑芥暟瀹氫箟锛?
/**
  * @brief  LCD1602寤舵椂鍑芥暟锛?2MHz璋冪敤鍙欢鏃?ms
  * @param  鏃?
  * @retval 鏃?
  */
void LCD_Delay()
{
	unsigned char i, j;

	i = 2;
	j = 239;
	do
	{
		while (--j);
	} while (--i);
}

/**
  * @brief  LCD1602鍐欏懡浠?
  * @param  Command 瑕佸啓鍏ョ殑鍛戒护
  * @retval 鏃?
  */
void LCD_WriteCommand(unsigned char Command)
{
	LCD_RS=0;
	LCD_RW=0;
	LCD_DataPort=Command;
	LCD_EN=1;
	LCD_Delay();
	LCD_EN=0;
	LCD_Delay();
}

/**
  * @brief  LCD1602鍐欐暟鎹?
  * @param  Data 瑕佸啓鍏ョ殑鏁版嵁
  * @retval 鏃?
  */
void LCD_WriteData(unsigned char Data)
{
	LCD_RS=1;
	LCD_RW=0;
	LCD_DataPort=Data;
	LCD_EN=1;
	LCD_Delay();
	LCD_EN=0;
	LCD_Delay();
}

/**
  * @brief  LCD1602璁剧疆鍏夋爣浣嶇疆
  * @param  Line 琛屼綅缃紝鑼冨洿锛?~2
  * @param  Column 鍒椾綅缃紝鑼冨洿锛?~16
  * @retval 鏃?
  */
void LCD_SetCursor(unsigned char Line,unsigned char Column)
{
	if(Line==1)
	{
		LCD_WriteCommand(0x80|(Column-1));
	}
	else if(Line==2)
	{
		LCD_WriteCommand(0x80|(Column-1+0x40));
	}
}

/**
  * @brief  LCD1602鍒濆鍖栧嚱鏁?
  * @param  鏃?
  * @retval 鏃?
  */
void LCD_Init()
{
	LCD_WriteCommand(0x38);//鍏綅鏁版嵁鎺ュ彛锛屼袱琛屾樉绀猴紝5*7鐐归樀
	LCD_WriteCommand(0x0c);//鏄剧ず寮€锛屽厜鏍囧叧锛岄棯鐑佸叧
	LCD_WriteCommand(0x06);//鏁版嵁璇诲啓鎿嶄綔鍚庯紝鍏夋爣鑷姩鍔犱竴锛岀敾闈笉鍔?
	LCD_WriteCommand(0x01);//鍏夋爣澶嶄綅锛屾竻灞?
}

/**
  * @brief  鍦↙CD1602鎸囧畾浣嶇疆涓婃樉绀轰竴涓瓧绗?
  * @param  Line 琛屼綅缃紝鑼冨洿锛?~2
  * @param  Column 鍒椾綅缃紝鑼冨洿锛?~16
  * @param  Char 瑕佹樉绀虹殑瀛楃
  * @retval 鏃?
  */
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char)
{
	LCD_SetCursor(Line,Column);
	LCD_WriteData(Char);
}

/**
  * @brief  鍦↙CD1602鎸囧畾浣嶇疆寮€濮嬫樉绀烘墍缁欏瓧绗︿覆
  * @param  Line 璧峰琛屼綅缃紝鑼冨洿锛?~2
  * @param  Column 璧峰鍒椾綅缃紝鑼冨洿锛?~16
  * @param  String 瑕佹樉绀虹殑瀛楃涓?
  * @retval 鏃?
  */
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String)
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=0;String[i]!='\0';i++)
	{
		LCD_WriteData(String[i]);
	}
}

/**
  * @brief  杩斿洖鍊?X鐨刌娆℃柟
  */
int LCD_Pow(int X,int Y)
{
	unsigned char i;
	int Result=1;
	for(i=0;i<Y;i++)
	{
		Result*=X;
	}
	return Result;
}

/**
  * @brief  鍦↙CD1602鎸囧畾浣嶇疆寮€濮嬫樉绀烘墍缁欐暟瀛?
  * @param  Line 璧峰琛屼綅缃紝鑼冨洿锛?~2
  * @param  Column 璧峰鍒椾綅缃紝鑼冨洿锛?~16
  * @param  Number 瑕佹樉绀虹殑鏁板瓧锛岃寖鍥达細0~65535
  * @param  Length 瑕佹樉绀烘暟瀛楃殑闀垮害锛岃寖鍥达細1~5
  * @retval 鏃?
  */
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=Length;i>0;i--)
	{
		LCD_WriteData(Number/LCD_Pow(10,i-1)%10+'0');
	}
}

/**
  * @brief  鍦↙CD1602鎸囧畾浣嶇疆寮€濮嬩互鏈夌鍙峰崄杩涘埗鏄剧ず鎵€缁欐暟瀛?
  * @param  Line 璧峰琛屼綅缃紝鑼冨洿锛?~2
  * @param  Column 璧峰鍒椾綅缃紝鑼冨洿锛?~16
  * @param  Number 瑕佹樉绀虹殑鏁板瓧锛岃寖鍥达細-32768~32767
  * @param  Length 瑕佹樉绀烘暟瀛楃殑闀垮害锛岃寖鍥达細1~5
  * @retval 鏃?
  */
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length)
{
	unsigned char i;
	unsigned int Number1;
	LCD_SetCursor(Line,Column);
	if(Number>=0)
	{
		LCD_WriteData('+');
		Number1=Number;
	}
	else
	{
		LCD_WriteData('-');
		Number1=-Number;
	}
	for(i=Length;i>0;i--)
	{
		LCD_WriteData(Number1/LCD_Pow(10,i-1)%10+'0');
	}
}

/**
  * @brief  鍦↙CD1602鎸囧畾浣嶇疆寮€濮嬩互鍗佸叚杩涘埗鏄剧ず鎵€缁欐暟瀛?
  * @param  Line 璧峰琛屼綅缃紝鑼冨洿锛?~2
  * @param  Column 璧峰鍒椾綅缃紝鑼冨洿锛?~16
  * @param  Number 瑕佹樉绀虹殑鏁板瓧锛岃寖鍥达細0~0xFFFF
  * @param  Length 瑕佹樉绀烘暟瀛楃殑闀垮害锛岃寖鍥达細1~4
  * @retval 鏃?
  */
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
	unsigned char i,SingleNumber;
	LCD_SetCursor(Line,Column);
	for(i=Length;i>0;i--)
	{
		SingleNumber=Number/LCD_Pow(16,i-1)%16;
		if(SingleNumber<10)
		{
			LCD_WriteData(SingleNumber+'0');
		}
		else
		{
			LCD_WriteData(SingleNumber-10+'A');
		}
	}
}

/**
  * @brief  鍦↙CD1602鎸囧畾浣嶇疆寮€濮嬩互浜岃繘鍒舵樉绀烘墍缁欐暟瀛?
  * @param  Line 璧峰琛屼綅缃紝鑼冨洿锛?~2
  * @param  Column 璧峰鍒椾綅缃紝鑼冨洿锛?~16
  * @param  Number 瑕佹樉绀虹殑鏁板瓧锛岃寖鍥达細0~1111 1111 1111 1111
  * @param  Length 瑕佹樉绀烘暟瀛楃殑闀垮害锛岃寖鍥达細1~16
  * @retval 鏃?
  */
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length)
{
	unsigned char i;
	LCD_SetCursor(Line,Column);
	for(i=Length;i>0;i--)
	{
		LCD_WriteData(Number/LCD_Pow(2,i-1)%2+'0');
	}
}
```c
#ifndef __LCD1602_H__
#define __LCD1602_H__

//鐢ㄦ埛璋冪敤鍑芥暟锛?
void LCD_Init();
void LCD_ShowChar(unsigned char Line,unsigned char Column,char Char);
void LCD_ShowString(unsigned char Line,unsigned char Column,char *String);
void LCD_ShowNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowSignedNum(unsigned char Line,unsigned char Column,int Number,unsigned char Length);
void LCD_ShowHexNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);
void LCD_ShowBinNum(unsigned char Line,unsigned char Column,unsigned int Number,unsigned char Length);

#endif
```c
#include <REGX52.H>
#include "Delay.h"

/**
  * @brief  鐭╅樀閿洏璇诲彇鎸夐敭閿爜
  * @param  鏃?
  * @retval KeyNumber 鎸変笅鎸夐敭鐨勯敭鐮佸€?
			濡傛灉鎸夐敭鎸変笅涓嶆斁锛岀▼搴忎細鍋滅暀鍦ㄦ鍑芥暟锛屾澗鎵嬬殑涓€鐬棿锛岃繑鍥炴寜閿敭鐮侊紝娌℃湁鎸夐敭鎸変笅鏃讹紝杩斿洖0
  */
unsigned char MatrixKey()
{
	unsigned char KeyNumber=0;
	
	P1=0xFF;
	P1_3=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=1;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=5;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=9;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=13;}
	
	P1=0xFF;
	P1_2=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=2;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=6;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=10;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=14;}
	
	P1=0xFF;
	P1_1=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=3;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=7;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=11;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=15;}
	
	P1=0xFF;
	P1_0=0;
	if(P1_7==0){Delay(20);while(P1_7==0);Delay(20);KeyNumber=4;}
	if(P1_6==0){Delay(20);while(P1_6==0);Delay(20);KeyNumber=8;}
	if(P1_5==0){Delay(20);while(P1_5==0);Delay(20);KeyNumber=12;}
	if(P1_4==0){Delay(20);while(P1_4==0);Delay(20);KeyNumber=16;}
	
	return KeyNumber;
}
```c
#ifndef __MATRIXKEY_H__
#define __MATRIXKEY_H__

unsigned char MatrixKey();

#endif
```c
#include <REGX52.H>
#include "Delay.h"

sbit RCK=P3^5;		//RCLK
sbit SCK=P3^6;		//SRCLK
sbit SER=P3^4;		//SER

#define MATRIX_LED_PORT		P0

/**
  * @brief  74HC595鍐欏叆涓€涓瓧鑺?
  * @param  Byte 瑕佸啓鍏ョ殑瀛楄妭
  * @retval 鏃?
  */
void _74HC595_WriteByte(unsigned char Byte)
{
	unsigned char i;
	for(i=0;i<8;i++)
	{
		SER=Byte&(0x80>>i);
		SCK=1;
		SCK=0;
	}
	RCK=1;
	RCK=0;
}

/**
  * @brief  鐐归樀灞忓垵濮嬪寲
  * @param  鏃?
  * @retval 鏃?
  */
void MatrixLED_Init()
{
	SCK=0;
	RCK=0;
}

/**
  * @brief  LED鐐归樀灞忔樉绀轰竴鍒楁暟鎹?
  * @param  Column 瑕侀€夋嫨鐨勫垪锛岃寖鍥达細0~7锛?鍦ㄦ渶宸﹁竟
  * @param  Data 閫夋嫨鍒楁樉绀虹殑鏁版嵁锛岄珮浣嶅湪涓婏紝1涓轰寒锛?涓虹伃
  * @retval 鏃?
  */
void MatrixLED_ShowColumn(unsigned char Column,Data)
{
	_74HC595_WriteByte(Data);
	MATRIX_LED_PORT=~(0x80>>Column);
	Delay(1);
	MATRIX_LED_PORT=0xFF;
}
```c
#ifndef __MATRIX_LED_H__
#define __MATRIX_LED_H__

void MatrixLED_Init();
void MatrixLED_ShowColumn(unsigned char Column,Data);


#endif
```c
#include <REGX52.H>
#include "Delay.h"	//鍖呭惈Delay澶存枃浠?

//鏁扮爜绠℃鐮佽〃
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};

//鏁扮爜绠℃樉绀哄瓙鍑芥暟
void Nixie(unsigned char Location,Number)
{
	switch(Location)		//浣嶇爜杈撳嚭
	{
		case 1:P2_4=1;P2_3=1;P2_2=1;break;
		case 2:P2_4=1;P2_3=1;P2_2=0;break;
		case 3:P2_4=1;P2_3=0;P2_2=1;break;
		case 4:P2_4=1;P2_3=0;P2_2=0;break;
		case 5:P2_4=0;P2_3=1;P2_2=1;break;
		case 6:P2_4=0;P2_3=1;P2_2=0;break;
		case 7:P2_4=0;P2_3=0;P2_2=1;break;
		case 8:P2_4=0;P2_3=0;P2_2=0;break;
	}
	P0=NixieTable[Number];	//娈电爜杈撳嚭
	Delay(1);				//鏄剧ず涓€娈垫椂闂?
	P0=0x00;				//娈电爜娓?锛屾秷褰?
}
```c
#ifndef __NIXIE_H__
#define __NIXIE_H__

void Nixie(unsigned char Location,Number);

#endif
```c
#include <REGX52.H>

/**
  * @brief  瀹氭椂鍣?鍒濆鍖栵紝1姣@12.000MHz
  * @param  鏃?
  * @retval 鏃?
  */
void Timer0Init(void)
{
	TMOD &= 0xF0;		//璁剧疆瀹氭椂鍣ㄦā寮?
	TMOD |= 0x01;		//璁剧疆瀹氭椂鍣ㄦā寮?
	TL0 = 0x18;		//璁剧疆瀹氭椂鍒濆€?
	TH0 = 0xFC;		//璁剧疆瀹氭椂鍒濆€?
	TF0 = 0;		//娓呴櫎TF0鏍囧織
	TR0 = 1;		//瀹氭椂鍣?寮€濮嬭鏃?
	ET0=1;
	EA=1;
	PT0=0;
}

/*瀹氭椂鍣ㄤ腑鏂嚱鏁版ā鏉?
void Timer0_Routine() interrupt 1
{
	static unsigned int T0Count;
	TL0 = 0x18;		//璁剧疆瀹氭椂鍒濆€?
	TH0 = 0xFC;		//璁剧疆瀹氭椂鍒濆€?
	T0Count++;
	if(T0Count>=1000)
	{
		T0Count=0;
		
	}
}
*/
```c
#ifndef __TIMER0_H__
#define __TIMER0_H__

void Timer0Init(void);

#endif
```c
#include <REGX52.H>

/**
  * @brief  涓插彛鍒濆鍖栵紝4800bps@12.000MHz
  * @param  鏃?
  * @retval 鏃?
  */
void UART_Init()
{
	SCON=0x40;
	PCON |= 0x80;
	TMOD &= 0x0F;		//璁剧疆瀹氭椂鍣ㄦā寮?
	TMOD |= 0x20;		//璁剧疆瀹氭椂鍣ㄦā寮?
	TL1 = 0xF3;		//璁惧畾瀹氭椂鍒濆€?
	TH1 = 0xF3;		//璁惧畾瀹氭椂鍣ㄩ噸瑁呭€?
	ET1 = 0;		//绂佹瀹氭椂鍣?涓柇
	TR1 = 1;		//鍚姩瀹氭椂鍣?
}

/**
  * @brief  涓插彛鍙戦€佷竴涓瓧鑺傛暟鎹?
  * @param  Byte 瑕佸彂閫佺殑涓€涓瓧鑺傛暟鎹?
  * @retval 鏃?
  */
void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}
```c
#ifndef __UART_H__
#define __UART_H__

void UART_Init();
void UART_SendByte(unsigned char Byte);

#endif
```c

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值