出租车计价器程序Word文件下载.docx

上传人:b****6 文档编号:17070264 上传时间:2022-11-28 格式:DOCX 页数:13 大小:19.29KB
下载 相关 举报
出租车计价器程序Word文件下载.docx_第1页
第1页 / 共13页
出租车计价器程序Word文件下载.docx_第2页
第2页 / 共13页
出租车计价器程序Word文件下载.docx_第3页
第3页 / 共13页
出租车计价器程序Word文件下载.docx_第4页
第4页 / 共13页
出租车计价器程序Word文件下载.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

出租车计价器程序Word文件下载.docx

《出租车计价器程序Word文件下载.docx》由会员分享,可在线阅读,更多相关《出租车计价器程序Word文件下载.docx(13页珍藏版)》请在冰豆网上搜索。

出租车计价器程序Word文件下载.docx

sbitSCL=P1^3;

unsignedchartab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedchartable1[8]={0x3F,0x3F,0xbf,0x3F,0x3F,0xbf,0x3F,0x3F};

//00-00-00

unsignedcharcc[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

inttop=0;

unsignedcharsecond;

unsignedchartcount;

unsignedcharminute;

unsignedcharhour;

unsignedintgl=0;

//公里数(百米)

unsignedchardj=16;

//单价(角)

unsignedintze=0;

//总额(角)

voidsendbyte(ucharbyte)

ucharnum,c;

num=tab[byte];

for(c=0;

c<

8;

c++)

{

CLK=0;

DAT=num&

0x80;

//(0x80即十进制的128,二进制的10000000按位发送)

CLK=1;

num<

<

=1;

}

voiddelay_50ms(unsignedintt)//50Ms延时程序

unsignedintj;

for(;

t>

0;

t--)

for(j=6245;

j>

j--)

{;

voiddisplay() 

//显示//

unsignedcharh;

while

(1){

for(h=0;

h<

10;

h++){

delay_50ms

(1);

sendbyte(h);

delay_50ms(10);

h=0;

}

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

/*ds1302实时时钟C程序*/

sbitT_CLK=P1^2;

/*实时时钟时钟线引脚*/

sbitT_IO=P1^1;

/*实时时钟数据线引脚*/

sbitT_RST=P1^0;

/*实时时钟复位线引脚*/

//sbitOE="

P3"

^6;

sbitACC0=ACC^0;

sbitACC7=ACC^7;

uchartime[8]="

:

"

;

ucharmin,hou,day,mon,yea;

voidInit1302(void);

voidv_W1302(ucharucAddr,ucharucDa);

ucharuc_R1302(ucharucAddr);

voidv_BurstW1302T(uchar*pSecDa);

voidv_BurstR1302T(uchar*pSecDa);

voidv_BurstW1302R(uchar*pReDa);

voidv_BurstR1302R(uchar*pReDa);

voidv_Set1302(uchar*pSecDa);

voidv_Get1302(ucharucCurtime[]);

voiddonetime(void);

voidbcd_int(uchari);

voidbcdtoInt(void);

voidSetTime(void);

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

*

*名称:

v_RTInputByte

*说明:

*功能:

往DS1302写入1Byte数据

*调用:

*输入:

ucDa写入的数据

*返回值:

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

voidv_WTInputByte(ucharucDa)

{

uchari;

//OE=0;

ACC=ucDa;

for(i=8;

i>

i--)

T_IO=ACC0;

//*相当于汇编中的RRC

T_CLK=1;

T_CLK=0;

ACC=ACC>

>

1;

//OE="

1"

ucharuc_RTOutputByte

从DS1302读取1Byte数据

ACC

ucharuc_RTOutputByte(void)

ACC=ACC>

1;

//*相当于汇编中的RRC

ACC7=T_IO;

}

//OE=1;

return(ACC);

v_W1302

先写地址,后写命令/数据

往DS1302写入数据

v_RTInputByte()

ucAddr:

DS1302地址,ucDa:

要写的数据

voidv_W1302(ucharucAddr,ucharucDa)

T_RST=0;

T_RST=1;

v_WTInputByte(ucAddr);

/*地址,命令*/

v_WTInputByte(ucDa);

/*写1Byte数据*/

T_RST=0;

uc_R1302

先写地址,后读命令/数据

读取DS1302某地址的数据

v_RTInputByte(),uc_RTOutputByte()

DS1302地址

ucDa:

读取的数据

ucharuc_R1302(ucharucAddr)

ucharucDa;

ucDa=uc_RTOutputByte();

/*读1Byte数据*/

return(ucDa);

v_BurstW1302T

先写地址,后写数据(时钟多字节方式)

往DS1302写入时钟数据(多字节方式)

pSecDa:

时钟数据地址格式为:

秒分时日月星期年控制

*8Byte(BCD码)1B1B1B1B1B1B1B1B

/*voidv_BurstW1302T(uchar*pSecDa)

v_W1302(0x8e,0x00);

//*控制命令,WP=0,写操作?

v_WTInputByte(0xbe);

//*0xbe:

时钟多字节写命令

for(i=8;

i>

i--)//*8Byte=7Byte时钟数据+1Byte控制

v_WTInputByte(*pSecDa);

//*写1Byte数据

pSecDa++;

}*/

v_BurstR1302T

先写地址,后读命令/数据(时钟多字节方式)

读取DS1302时钟数据

v_RTInputByte(),uc_RTOutputByte()

秒分时日月星期年

*7Byte(BCD码)1B1B1B1B1B1B1B

/*voidv_BurstR1302T(uchar*pSecDa)

v_WTInputByte(0xbf);

//*0xbf:

时钟多字节读命令

i--)

*pSecDa=uc_RTOutputByte();

//*读1Byte数据

v_BurstW1302R

先写地址,后写数据(寄存器多字节方式)

往DS1302寄存器数写入数据(多字节方式)

pReDa:

寄存器数据地址

/*voidv_BurstW1302R(uchar*pReDa)

v_WTInputByte(0xfe);

for(i=31;

i--)//*31Byte寄存器数据

v_WTInputByte(*pReDa);

//*写1Byte数据

pReDa++;

uc_BurstR1302R

先写地址,后读命令/数据(寄存器多字节方式)

读取DS1302寄存器数据

/*voidv_BurstR1302R(uchar*pReDa)

v_WTInputByte(0xff);

i--)//*31Byte寄存器数据

*pReDa=uc_RTOutputByte();

v_Set1302

设置初始时间

v_W1302()

初始时间地址。

初始时间格式为:

/*voidv_Set1302(uchar*pSecDa)

ucharucAddr=0x80;

//控制命令,WP=0,写操作?

for(i=7;

i--)

v_W1302(ucAddr,*pSecDa);

//秒分时日月星期年

ucAddr+=2;

v_W1302(0x8e,0x80);

//控制命令,WP=1,写保护?

}*/

v_Get1302

读取DS1302当前时间

uc_R1302()

ucCurtime:

保存当前时间地址。

当前时间格式为:

/*voidv_Get1302(ucharucCurtime[])

ucharucAddr=0x81;

for(i=0;

i<

7;

i++)

ucCurtime=uc_R1302(ucAddr);

//*格式为:

ucAddr+=2;

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

Init1302

初始化DS1302

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

voidInit1302(void)

//控制写入WP=0

v_W1302(0x90,0xa5);

v_W1302(0x80,0x00);

//秒

v_W1302(0x82,0x59);

//分

v_W1302(0x84,0x10);

//时

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

donetime

时间处理

voiddonetime(void)

uchard;

d=uc_R1302(0x81);

time[6]=d/16+48;

time[7]=d%16+48;

d=uc_R1302(0x83);

time[3]=d/16+48;

time[4]=d%16+48;

d=uc_R1302(0x85);

time[0]=d/16+48;

time[1]=d%16+48;

//bcd_int(d);

//

/*voidbcd_int(uchari)

ucharj;

time[0]=(i&

0x0f)+48;

j=i>

4;

time[1]=(j&

/*voidbcdtoInt(void)

for(i=0;

bcd_int(ucCurtm);

voidSetTime(void)

v_W1302(0x80,0x80);

v_W1302(0x82,min);

v_W1302(0x84,hou);

uint 

AT24C02_com()

ucharbuffer1[3]={60,70,1};

//要写入的数据

ucharbuffer2[3];

//读出的数据存放地址

AT24C02_write(0x010,buffer1,3);

//将buffer1中的元素写入0x010开始的地址

AT24C02_read(0x010,buffer2,3);

//从0x010开始的地址读出3个字节

voidI2C_start(void) 

//产生启动信号

SDA=1;

SCL=1;

//SCL为高电平时SDA由高变低

SDA=0;

SCL=0;

voidI2C_stop(void) 

//产生停止信号

//SCL为高电平时SDA由低变高

voidI2C_send_ack(void) 

//发送ACK(确认)信号

bitTestAck() 

//测试AT24C02的ACK信号

bitErrorBit;

ErrorBit=SDA;

//读取SDA线上电平,等待确认

return(ErrorBit);

//若SDA=1,说明尚未处理完

voidI2C_write_byte(ucharinput)//向AT24C02写入一个字节

uchartemp;

for(temp=8;

temp!

=0;

temp--) 

//发送8位数据

SDA=(bit)(input&

0x80);

//SDA为将要发送的位

//发送一位数据

input=input<

//左移一位

ucharI2C_read_byte(void) 

//从AT24C02读出一个字节

uchartemp,rbyte=0;

//rbyte存放读出的数据

//读取8位数据

rbyte=rbyte<

rbyte=rbyte|((uchar)(SDA));

//SDA为将要发送的位

//读取一位数据

return(rbyte);

voidAT24C02_write(ucharadr,uchar*buf,ucharN)

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

当前位置:首页 > 初中教育 > 政史地

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

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