单片机C语言后程序集文档格式.docx

上传人:b****5 文档编号:21298937 上传时间:2023-01-29 格式:DOCX 页数:179 大小:77.28KB
下载 相关 举报
单片机C语言后程序集文档格式.docx_第1页
第1页 / 共179页
单片机C语言后程序集文档格式.docx_第2页
第2页 / 共179页
单片机C语言后程序集文档格式.docx_第3页
第3页 / 共179页
单片机C语言后程序集文档格式.docx_第4页
第4页 / 共179页
单片机C语言后程序集文档格式.docx_第5页
第5页 / 共179页
点击查看更多>>
下载资源
资源描述

单片机C语言后程序集文档格式.docx

《单片机C语言后程序集文档格式.docx》由会员分享,可在线阅读,更多相关《单片机C语言后程序集文档格式.docx(179页珍藏版)》请在冰豆网上搜索。

单片机C语言后程序集文档格式.docx

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

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

函数功能:

延时1ms

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

33+2)×

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

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

voiddelay1ms()

{

unsignedchari,j;

for(i=0;

i<

10;

i++)

for(j=0;

j<

33;

j++)

;

}

延时若干毫秒

入口参数:

n

voiddelaynms(unsignedcharn)

{

unsignedchari;

n;

delay1ms();

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

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

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

判断液晶模块的忙碌状态

返回值:

result。

result=1,忙碌;

result=0,不忙

unsignedcharBusyTest(void)

bitresult;

RS=0;

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

RW=1;

E=1;

//E=1,才允许读写

_nop_();

//空操作

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

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(0x38);

//显示模式设置:

16×

2显示,5×

7点阵,8位数据接口

delaynms(5);

//延时5ms ,给硬件一点反应时间

//连续三次,确保初始化成功

WriteInstruction(0x0c);

显示开,无光标,光标不闪烁

WriteInstruction(0x06);

光标右移,字符不移

WriteInstruction(0x01);

//清屏幕指令,将以前的显示内容清除

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

函数功能:

显示小时

voidDisplay(unsignedcharx)

i=x/10;

//取整运算,求得十位数字

j=x%10;

//取余运算,求得各位数字

WriteAddress(0x44);

//写显示地址,将十位数字显示在第2行第5列

WriteData(digit[i]);

//将十位数字的字符常量写入LCD

WriteData(digit[j]);

//将个位数字的字符常量写入LCD

以下是对AT24C02的读写操作程序

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

开始数据传送

voidstart()

//开始位

SDA=1;

//SDA初始化为高电平“1”

SCL=1;

//开始数据传送时,要求SCL为高电平“1”

//等待一个机器周期

SDA=0;

//SDA的下降沿被认为是开始信号

SCL=0;

//SCL为低电平时,SDA上数据才允许变化(即允许以后的数据传递)

}

结束数据传送

voidstop()

//停止位

//SDA初始化为低电平“0”

//结束数据传送时,要求SCL为高电平“1”

//SDA的上升沿被认为是结束信号

从AT24Cxx读取数据

出口参数:

unsignedcharReadData()

//从AT24Cxx移入数据到MCU

unsignedcharx;

//储存从AT24Cxx中读出的数据

for(i=0;

i<

8;

i++)

SCL=1;

//SCL置为高电平

x<

<

=1;

//将x中的各二进位向左移一位

x|=(unsignedchar)SDA;

//将SDA上的数据通过按位“或“运算存入x中

SCL=0;

//在SCL的下降沿读出数据

return(x);

//将读取的数据返回

向AT24Cxx的当前地址写入数据

y(储存待写入的数据)

//在调用此数据写入函数前需首先调用开始函数start(),所以SCL=0

bitWriteCurrent(unsignedchary)

bitack_bit;

//储存应答位

i++)//循环移入8个位

SDA=(bit)(y&

0x80);

//通过按位“与”运算将最高位数据送到S

//因为传送时高位在前,低位在后

//等待一个机器周期

//在SCL的上升沿将数据写入AT24Cxx

//将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲

y<

=1;

//将y中的各二进位向左移一位

//发送设备(主机)应在时钟脉冲的高电平期间(SCL=1)释放SDA线,

//以让SDA线转由接收设备(AT24Cxx)控制

//根据上述规定,SCL应为高电平

ack_bit=SDA;

//接受设备(AT24Cxx)向SDA送低电平,表示已经接收到一个字节

//若送高电平,表示没有接收到,传送异常

returnack_bit;

//返回AT24Cxx应答位

向AT24Cxx中的指定地址写入数据

add(储存指定的地址);

dat(储存待写入的数据)

voidWriteSet(unsignedcharadd,unsignedchardat)

//在指定地址addr处写入数据WriteCurrent

start();

//开始数据传递

WriteCurrent(OP_WRITE);

//选择要操作的AT24Cxx芯片,并告知要对其写入数据

WriteCurrent(add);

//写入指定地址

WriteCurrent(dat);

//向当前地址(上面指定的地址)写入数据

stop();

//停止数据传递

delaynms(4);

//1个字节的写入周期为1ms,最好延时1ms以上

从AT24Cxx中的当前地址读取数据

x(储存读出的数据)

unsignedcharReadCurrent()

WriteCurrent(OP_READ);

//选择要操作的AT24Cxx芯片,并告知要读其数据

x=ReadData();

//将读取的数据存入x

returnx;

//返回读取的数据

从AT24Cxx中的指定地址读取数据

set_add

x

unsignedcharReadSet(unsignedcharset_add)

//在指定地址读取

WriteCurrent(set_add);

return(ReadCurrent());

//从指定地址读出数据并返回

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

主函数

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

voidmain(void)

unsignedcharsum;

//储存计数值

//储存从AT24C02读出的值

LcdInitiate();

//调用LCD初始化函数

sum=0;

//将计数值初始化为0

while

(1)//无限循环

if(S==0)//如果该键被按下

{

delaynms(80);

//软件消抖,延时80ms

if(S==0)//确实该键被按下

sum++;

//计件值加1

if(sum==99)//如果计满99

sum=0;

//清0,重新开始计数

}

WriteSet(0x01,sum);

//将计件值写入AT24C02中的指定地址"

0x01"

x=ReadSet(0x01);

//从AT24C02中读出计件值

Display(x);

//将计件值用1602LCD显示

//实例70:

对I2C总线上挂接多个AT24C02的读写操作

#include<

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

#defineOP_READ10xa1//器件1地址以及读取操作,0xa1即为10100001B

#defineOP_WRITE10xa0//器件1地址以及写入操作,0xa1即为10100000B

#defineOP_READ20xaf//器件2地址以及读取操作,0xa1即为10101111B

#defineOP_WRITE20xae//器件2地址以及写入操作,0xa1即为10101110B

//SDA的上升沿被认为是结束信号

unsignedcharReadData(

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

当前位置:首页 > 法律文书 > 判决书

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

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