单片机c51程序Word下载.docx

上传人:b****8 文档编号:22957377 上传时间:2023-02-06 格式:DOCX 页数:29 大小:64.69KB
下载 相关 举报
单片机c51程序Word下载.docx_第1页
第1页 / 共29页
单片机c51程序Word下载.docx_第2页
第2页 / 共29页
单片机c51程序Word下载.docx_第3页
第3页 / 共29页
单片机c51程序Word下载.docx_第4页
第4页 / 共29页
单片机c51程序Word下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

单片机c51程序Word下载.docx

《单片机c51程序Word下载.docx》由会员分享,可在线阅读,更多相关《单片机c51程序Word下载.docx(29页珍藏版)》请在冰豆网上搜索。

单片机c51程序Word下载.docx

主函数

voidmain(void)

TMOD=0x20;

//定时器T1工作于方式2

SCON=0x50;

//SCON=01010000B,串口工作方式1,允许接收(REN=1)

PCON=0x00;

//PCON=00000000B,波特率9600

TH1=0xfd;

//根据规定给定时器T1赋初值

TL1=0xfd;

//根据规定给定时器T1赋初值

TR1=1;

//启动定时器T1

REN=1;

//允许接收

while

(1)

{

P1=Receive();

//将接收到的数据送P1口显示

}

单片机向计算机发送数据

//实例58:

单片机向PC发送数据

unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

//流水灯控制码,该数组被定义为全局变量

向PC发送一个字节数据

voidSend(unsignedchardat)

SBUF=dat;

while(TI==0)

TI=0;

/**************************************************************

延时约150ms

**************************************************************/

voiddelay(void)

unsignedcharm,n;

for(m=0;

m<

200;

m++)

for(n=0;

n<

250;

n++)

unsignedchari;

//TMOD=00100000B,定时器T1工作于方式2

SCON=0x40;

//SCON=01000000B,串口工作方式1

for(i=0;

i<

8;

i++)//模拟检测数据

Send(Tab[i]);

//发送数据i

delay();

//150ms发送一次数据

}

}

基于方式1的单工通信

Receive

//实例56-2:

数据接收程序

Send

//实例56-1:

数据发送程序

//50ms发送一次检测数据

基于方式3的单工通信

//实例57-2:

sbitp=PSW^0;

while(RI==0)//只要接收中断标志位RI没有被置"

1"

ACC=SBUF;

if(RB8==p)

dat=ACC;

SCON=0xd0;

//SCON=11010000B,串口工作方式1,允许接收(REN=1)

//实例57-1:

ACC=dat;

TB8=p;

SCON=0xc0;

//SCON=11000000B,串口工作方式3,

//SM2置0,不使用多机通信,TB8置0

将方式0用于扩展并行输出控制流水灯

//实例55:

方式0控制流水灯循环点亮

//包含51单片机寄存器定义的头文件

intrins.h>

//包含函数_nop_()定义的头文件

unsignedcharcodeTab[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};

sbitP17=P1^7;

发送一个字节的数据

P17=0;

//P1.7引脚输出清0信号,对74LS164清0

_nop_();

//延时一个机器周期

//延时一个机器周期,保证清0完成

P17=1;

//结束对74LS164的清0

//将数据写入发送缓冲器,启动发送

while(TI==0)//若没有发送完毕,等待

//发送完毕,TI被置“1”,需将其清0

/*******************************************

******************************************/

SCON=0x00;

//SCON=00000000B,使串行口工作于方式0

while

(1)

i++)

Send(Tab[i]);

//发送数据

delay();

//延时

AD转换实验

//实例94:

基于ADC0832的数字电压表

//包含_nop_()函数定义的头文件

sbitCS=P3^4;

//将CS位定义为P3.4引脚

sbitCLK=P1^0;

//将CLK位定义为P1.0引脚

sbitDIO=P1^1;

//将DIO位定义为P1.1引脚

//////////////////////////////////////////////////////////////////

unsignedcharcodedigit[10]={"

0123456789"

};

//定义字符数组显示数字

unsignedcharcodeStr[]={"

Volt="

//说明显示的是电压

/*******************************************************************************

以下是对液晶模块的操作程序

*******************************************************************************/

sbitRS=P2^0;

//寄存器选择位,将RS位定义为P2.0引脚

sbitRW=P2^1;

//读写选择位,将RW位定义为P2.1引脚

sbitE=P2^2;

//使能信号位,将E位定义为P2.2引脚

sbitBF=P0^7;

//忙碌标志位,,将BF位定义为P0.7引脚

延时1ms

(3j+2)*i=(3×

33+2)×

10=1010(微秒),可以认为是1毫秒

voiddelay1ms()

unsignedchari,j;

10;

for(j=0;

j<

33;

j++)

延时若干毫秒

入口参数:

n

voiddelaynms(unsignedcharn)

n;

delay1ms();

判断液晶模块的忙碌状态

返回值:

result。

result=1,忙碌;

result=0,不忙

bitBusyTest(void)

bitresult;

RS=0;

//根据规定,RS为低电平,RW为高电平时,可以读状态

RW=1;

E=1;

//E=1,才允许读写

//空操作

//空操作四个机器周期,给硬件反应时间

result=BF;

//将忙碌标志电平赋给result

E=0;

//将E恢复低电平

returnresult;

将模式设置指令或显示地址写入液晶模块

dictate

voidWriteInstruction(unsignedchardictate)

{

while(BusyTest()==1);

//如果忙就等待

//根据规定,RS和R/W同时为低电平时,可以写入指令

RW=0;

//E置低电平(根据表8-6,写指令时,E为高脉冲,

//就是让E从0到1发生正跳变,所以应先置"

0"

//空操作两个机器周期,给硬件反应时间

P0=dictate;

//将数据送入P0口,即写入指令或地址

//空操作四个机器周期,给硬件反应时间

//E置高电平

//当E由高电平跳变成低电平时,液晶模块开始执行命令

指定字符显示的实际地址

x

voidWriteAddress(unsignedcharx)

WriteInstruction(x|0x80);

//显示位置的确定方法规定为"

80H+地址码x"

将数据(字符的标准ASCII码)写入液晶模块

y(为字符常量)

voidWriteData(unsignedchary)

RS=1;

//RS为高电平,RW为低电平时,可以写入数据

P0=y;

//将数据送入P0口,即将数据写入液晶模块

_nop_();

对LCD的显示模式进行初始化设置

voidLcdInitiate(void)

delaynms(15);

//延时15ms,首次写指令时应给LCD一段较长的反应时间

WriteInstruction(0x3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 农学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1