问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

求一个c51的单片机c语言小程序,有酬谢。1

发布网友 发布时间:2023-10-08 21:35

我来回答

1个回答

热心网友 时间:2024-11-20 11:40

#include"REG52.h"//包含52头文件
#define ASCII_Mode 0

#define HEX_Mode 1
#define TRUE 1//定义布尔量'1':真
#define FALSE 0//定义布尔量'0':假
#define uchar unsigned char//定义 无符号字符型数据 简称
#define uint unsigned int//定义 无符号整型数据 简称
#define th1 0xfa//6.51us at 11.0592MHz Fosc for 8bit auto reload mode
uchar UART_DataR;//串口接收数据寄存器

uchar bdata Flag=0;//标志位 寄存器
sbit UART_ReFlag=Flag^0;//串口接收标志位 0:无数据 1:新数据
sbit UART_SendFlag=Flag^1;//串口发送标志位 0:空闲中 1:发送中
#define th0 0x4c

#define tl0 0x00//50ms at 11.0592MHz Fosc in Model 1
sbit LED=P2^1;

#define LED_On LED=0
#define LED_Off LED=1
#define FlickTimeAt50msCount 4//50ms*4=200ms
#define LED_FlickTimes 3
#define UserCodeLeng 5

uchar code UART_UserCode[UserCodeLeng]="qwert";
uchar UART_RecData;//UART_RecBuf[UserCodeLeng],
bit T50msFlag=0,UART_PassFlag,LED_FlickFlag,LED_OutFlag;

void Timer0() interrupt 1
{
static uchar t50ms=0;
TL0=tl0;
TH0=th0;
//T50msFlag=TRUE;
if(++t50ms>=FlickTimeAt50msCount)
{
t50ms-=FlickTimeAt50msCount;
LED_FlickFlag=TRUE;
}
}
void UART()interrupt 4//串口中断函数
{
if(RI)//若串口接收完成
{
RI=0;//清 串口接收溢出位
UART_DataR=SBUF;//将串口收到的数据存进 UART_DataR
UART_ReFlag=TRUE;//串口接收标志位 置位(有新数据)
}
if(TI)//若串口发送完成
{
TI=0;//清 串口发送溢出位
UART_SendFlag=FALSE;//清串口发送标志位(空闲中)
}
}
void UART_Init()//串口初始化函数

{
SCON=0x50;//选择通讯方式:10位异步收发,串口中断使能
PCON=0x80;//波特率倍频
TMOD &=0x0F;
TMOD |=0x20;//定时器1工作模式2(8位自重装,做波特率发生器)
TH1=th1;//定时器初值
TL1=th1;//定时器初值
TR1=1;//开始计时
ES=1;//允许串口中断
EA=1;//允许系统中断
}
bit UART_SendByte(uchar send_data) //串口发送字节函数,发送内容send_data,返回值:0 操作失败,1操作成功

{
if(!UART_SendFlag)//若串口空闲中,则
{
SBUF=send_data;//将发送内容 送到 串口寄存器
UART_SendFlag=TRUE;//置位串口发送标志位(进入忙态)
return TRUE;//返回1,操作成功
}
return FALSE;//否则,返回0,操作失败
}
uchar ASCII_ToHex(uchar ascii_data)//ASCII 转 Hex 函数

{
uchar hex_data=0;//定义 Hex变量存储转换结果
if(ascii_data>='0' && ascii_data<='9') hex_data=ascii_data-'0';//若 转换内容为 字符'0-9',则转成对应数字0-9
else if(ascii_data>='a' && ascii_data<='f') hex_data=ascii_data-'a'+10;//若 转换内容为 字符'a-f',则转成数字10-15
else if(ascii_data>='A' && ascii_data<='F') hex_data=ascii_data-'A'+10;//若 转换内容为 字符'A-F',则转成数字10-15
return hex_data;//返回转换结果,非以上字符,不在Hex(0-F)范围内,默认0
}
bit UART_ReadByte(uchar *p_data,bit data_mode) //串口读字节函数,返回值0 无数据,1 有数据,将结果以data_mood模式(ASCII_Mode或HEX_Mode)存到p_data指向地址

{
if(!UART_ReFlag) return FALSE;//若无新数据,则返回 0(无数据)
UART_ReFlag=FALSE;//否则,清 串口接收标志位
if(data_mode==HEX_Mode) *p_data=UART_DataR;//Hex模式,将串口接收结果存到p_data指向地址
if(data_mode==ASCII_Mode) *p_data=ASCII_ToHex(UART_DataR);//ASCII模式,将串口接收结果转成Hex后,存到p_data指向地址
return TRUE;//返回 1(有数据)
}
bit UART_Send(uchar data_leng,uchar *data_buf)
{
static bit send_start_flag=0;
static uchar send_leng,*send_buf,*send_loca;
if(!send_start_flag)
{
send_leng=data_leng;
send_buf=data_buf;
send_loca=send_buf;
send_start_flag=TRUE;
}
if(send_loca-send_buf==send_leng)
{
send_start_flag=FALSE;
return TRUE;
}
else if(UART_SendByte(*send_loca)) *send_loca++;
return FALSE;
}
void TimerInit()
{
TMOD&=0xf0;
TMOD|=0x01;
TH0=th0;
TL0=tl0;
TR0=0;
ET0=1;
EA=1;
}
void LED_Out()
{
static uchar flick_times=0;
static bit start_flag=FALSE;
if(LED_OutFlag)
{
LED_OutFlag=FALSE;
start_flag=TRUE;
TH0=th0;
TL0=tl0;
LED_On;
TR0=1;
}
if(start_flag)
{
if(LED_FlickFlag)
{
LED_FlickFlag=FALSE;
LED=~LED;
if(++flick_times>=(LED_FlickTimes<<1)-1)
{
flick_times=0;
LED_Off;
start_flag=FALSE;
TR0=0;
}
}
}
}
void UART_Check()
{
static uchar rec_num=0;
if(UART_ReadByte(&UART_RecData,HEX_Mode))
{
if(UART_RecData==UART_UserCode[rec_num]) rec_num++;
else rec_num=0;
if(rec_num==UserCodeLeng)
{
UART_PassFlag=TRUE;
LED_OutFlag=TRUE;
}
}
if(UART_PassFlag)
{
if(UART_Send(2,"OK")) UART_PassFlag=FALSE;
}
}
void main()
{
UART_Init();
TimerInit();
while(1)
{
UART_Check();
LED_Out();
}
}
这里面是 2个C文件,1个头文件的合成,没编译的,愿上帝保佑你吧
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 金庸武侠小说中武功最高的人物是谁?64 金庸的各部武侠小说中的武功招数!!139 C语言程序问题—增加日期输入功能1 数据库查询和索引有何区别?4 严于律己的后一句是什么29 金庸武侠小说里都有什么武功,阐述最最厉害的武功是什么。10 索引查找与一般查找的区别17 求一个c51的单片机c语言小程序,有酬谢 天籁l33更换bcm后配钥匙 金庸武侠小说里的武功有哪些50 检索和索引区别84 金庸武侠小说里最厉害的武功排名1798 科鲁兹BCM维修 问题 查询和检索的区别是什么70 科鲁兹bcm可以维修吗 查询和检索的区别是什么?7 金庸武侠小说里最厉害的武功和最厉害的人?530 11款polo1.4自动最高配的BCM是085还是086?3 科鲁兹维修车身控制模块大概多少钱 懂得进来。。。。49 金庸的武侠小说里谁的武功最高11 和SQL数据库里的查询&#47;全文检索有什么区别1 金庸小说中谁的武功最高?87 寻找Arm7嵌入式开发的高手 写一个简单的C语言程序,有现金... 在C语言中,程序有一个是system(&quot;CLS&quot;);时什么意...165 如何在一个C语言程序中设置两个函数5 带偏旁心的字有哪些82 带有心字底的字有哪些?461 如何在c语言程序中插入一个倒计时命令13 带有心旁的字有哪些?1 心字底的字有哪些?241 带有欠字旁的字有哪些132 写出几个带有心字偏旁的字。132 心字旁的字有哪些93 心字旁有什么字?1 从朱仙镇到郑州新东站客车的发车时间及班次4 怎样不接群消息1 义乌快递量全球第一,为什么义乌的快递量会成为全球第一?2 为什么拼多多上许多快递都是从浙江金华发过来的?18 如何看待义乌快递量全球第一? 为什么在京东买的小商品都在浙江一带发货啊?