×
单片机 > 单片机程序设计 > 详情

51单片机霍尔自行车码表测速里程表

发布时间:2021-09-07 发布时间:
|

#include //调用单片机头文件

#define uchar unsigned char //无符号字符型 宏定义 变量范围0~255

#define uint unsigned int //无符号整型 宏定义 变量范围0~65535


sbit clk = P1^3; //ds1302时钟线定义

sbit io = P1^4; //数据线

sbit rst = P1^5; //复位线

//秒 分 时 日 月 年 星期

uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a}; //写地址

uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b}; //读地址

uchar code init_ds[] ={0x55,0x17,0x15,0x01,0x01,0x13,0x13};

uchar miao,fen,shi,ri,yue,week,nian;

uchar i;


uchar t1_num,t2_num; //计时间中断的次数

unsigned long speed1,juli,time2;

float f_hz ,speed_km,speed_m;


uchar TH11,TL11;

uchar flag_en; //开始计算速度使能

uchar flag_stop_en; //要确定车子是否停下了

unsigned char plu;

uint juli_s; //每秒走的距离

uint juli_z; //总路程

float zhijing = 0.55; //直径 0.55M

bit flag_1s = 1; //1s

uchar menu_1; //菜单设置变量

uchar menu_2; //菜单设置变量


long zong_lc; //总量程


uchar flag_200ms;

uint shudu; //定义速度的变量

uint bj_shudu = 40; //报警速度



//这三个引脚参考资料

sbit rs=P2^4; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit rw=P2^5; //寄存器选择信号 H:数据寄存器 L:指令寄存器

sbit e =P2^6; //片选信号 下降沿触发


uchar code table_num[]="0123456789abcdefg";

uchar i;


sbit beep = P3^7; //蜂鸣器IO口定义




/******************1ms 延时函数*******************/

void delay_1ms(uint q)

{

uint i,j;

for(i=0;i

for(j=0;j<120;j++);

}



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

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

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

void delay_uint(uint q)

{

while(q--);

}


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

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

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

void write_com(uchar com)

{

i =0;

rs=0;

rw=0;

P0=com;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}


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

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

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

void write_data(uchar dat)

{

i =0;

rs=1;

rw=0;

P0=dat;

delay_uint(3);

e=1;

delay_uint(25);

e=0;

}


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

* 名称 : write_sfm2(uchar hang,uchar add,uchar date)

* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下

write_sfm1(1,5,23)

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

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

void write_sfm2(uchar hang,uchar add,uint date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/10%10);

write_data(0x30+date%10);

}


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

* 名称 : write_sfm4(uchar hang,uchar add,uchar date)

* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下

write_sfm1(1,5,23)

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

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

void write_sfm4(uchar hang,uchar add,uint date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/10000%10);

write_data(0x30+date/1000%10);

write_data('.');

write_data(0x30+date/100%10);

write_data(0x30+date/10%10);

write_data(0x30+date%10);

write_data('k');

write_data('m');

}


void write_sfm7(uchar hang,uchar add,uint date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date/100000%10);

write_data(0x30+date/100000%10);

write_data(0x30+date/10000%10);

write_data(0x30+date/1000%10);

write_data('.');

write_data(0x30+date/100%10);

write_data(0x30+date/10%10);

write_data('k');

write_data('m');

}


/***********************lcd1602上显示两位十进制数************************/

void write_sfm1(uchar hang,uchar add,uchar date)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

write_data(0x30+date % 10);

}



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

* 名称 : write_string(uchar hang,uchar add,uchar *p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

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

void write_string(uchar hang,uchar add,uchar *p)

{

if(hang==1)

write_com(0x80+add);

else

write_com(0x80+0x40+add);

while(1)

{

if(*p == '


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
异常和中断处理简介