历史上的今天
返回首页

历史上的今天

今天是:2024年12月03日(星期二)

正在发生

2020年12月03日 | 51单片机霍尔自行车码表测速里程表

2020-12-03 来源:51hei

#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 == '')  break;

                        write_data(*p);

                        p++;

                }        

}



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

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

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(table_num[date / 16]);

        write_data(table_num[date % 16]);        

}


/*****************控制光标函数********************/

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

{               

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        if(date == 1)

                write_com(0x0f);     //显示光标并且闪烁        

        else

                write_com(0x0c);   //关闭光标

}         




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

* 名称 : init_1602()

* 功能 : 初始化1602液晶

* 输入 : 无

* 输出 : 无

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

void init_1602()      //1602初始化

{

        write_com(0x38);

        write_com(0x0c);

        write_com(0x06);

        delay_uint(1000);

        write_string(1,0,"sd:00km/h  00:00");               

推荐阅读

史海拾趣

Datalinear公司的发展小趣事

在竞争激烈的电子行业中,Datalinear公司意识到单打独斗很难取得长远的发展。因此,公司积极寻求与其他企业的合作。通过与上下游企业的紧密合作,Datalinear公司不仅降低了生产成本,还提高了产品质量和交货速度。此外,公司还与一些科研机构建立了合作关系,共同研发新技术和新产品,实现了共赢的局面。

Cooper Industries公司的发展小趣事

在照明领域,Cooper Industries同样展现出了强大的实力。1987年,公司收购了英国McGraw-Edison,并成立了“库柏照明”事业部,这一举措使库柏照明迅速成为世界上最大的商业、工业、道路和住宅照明装置的制造商之一。此后,公司不断在照明领域进行创新和突破,如在2007年成功收购以LED灯具著称的io Lighting灯具公司,进一步巩固了其在节能灯具市场的地位。这些努力使得库柏照明在全球范围内享有极高的声誉和市场份额。

顺芯(Everest-semi)公司的发展小趣事

为了进一步提升公司的国际竞争力,顺芯公司积极开展国际合作与全球布局。公司与国际知名半导体厂商建立了战略合作关系,共同研发新产品、开拓新市场。同时,顺芯公司还在海外设立了研发中心和销售中心,以便更好地服务全球客户。这些举措使顺芯公司的全球市场份额逐年提升,成为了国际半导体行业的重要力量。

ADPOW公司的发展小趣事

在市场竞争日益激烈的背景下,ADPOW公司深知品质是生存和发展的关键。因此,公司建立了严格的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格把控。同时,公司注重品牌建设,通过广告宣传、参加展会等方式提升品牌知名度和美誉度。这些举措有效提升了公司的市场竞争力。

千志电子(CCO)公司的发展小趣事

为了进一步拓展业务版图,千志电子开始进军国际市场。2006年,千志电子在香港设立了千志电子(香港)有限公司,将其作为国际服务据点重心之一。这一举措使千志电子能够更好地了解国际市场需求和趋势,加强与国外客户的联系和合作。同时,千志电子还积极参加国际展览和论坛,展示其优质产品和先进技术,提高了品牌知名度和国际影响力。

泰科天润(GPT)公司的发展小趣事

随着技术的不断进步和市场的日益成熟,千志电子开始注重电阻产业的深耕。公司不仅专注于电阻的生产,还逐渐向电阻专用设备、原材料等领域延伸。2006年,千志电子成立了深圳市鑫兴志实业有限公司,主要生产电阻相关的生产机器如切割机、焊接机、成型机、涂装机等。同时,千志电子还成立了千志电子科技(湖北)有限公司,生产各类型电阻器、设备及电阻所需原材料如碳棒、线材等。这一战略调整使千志电子形成了从原材料到设备的完整产业链,提高了生产效率和产品质量,进一步巩固了其在电阻行业的领先地位。

问答坊 | AI 解惑

运放经常烧搞的很头疼

LM324N用了四五个月后经常烧坏,电源是+-12V,坏后输出脚都是-11V。 哪位高手帮分析分析有哪些原因…

查看全部问答>

单片机视频教程【7】串行口

$(\'swf_Dk1\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/30389828/v.swf\'), ...…

查看全部问答>

请给推荐个传感器吧

要采脉搏波信号 打算用光电的方式 有推荐的传感器吗?…

查看全部问答>

求助: 关于arm9和eVC的问题

新买一块arm9开发板, cpu是samsung S3C2410, 操作系统是wince5.0。 在pc上安装了eVC4.exe, evc4sp4.exe, STANDARD_SDK.msi以及ActiveSync4.2, usb的驱动程序已经装好并已经能够实现pc与目标板的连接。 但是eVC对一简单程序编译之后出现下面 ...…

查看全部问答>

WinCE里如何对通用HID设备进行操作啊?

我有一个通用HID设备,在WinXP下直接调用setupapi.lib、hid.lib 和CreateFile()、ReadFile()、WriteFile()就可以对该设备进行读写操作。我现在想在WinCE下对该通用HID设备进行操作,不知如何进行?在WinCE下没没有setupapi.lib、hid.lib 库文件。…

查看全部问答>

高手帮分析分析两个电路?

这两个电路的区别是什么呢?那个电路会更好一点?…

查看全部问答>

PWM输出的问题!50%输出正常!12.5%输出100MS有20MS没有波行输出

                                 PWM输出的问题!ST 例程! 占空比 50% 输出 正常! 12.5%输出100MS有20MS没有波行输出…

查看全部问答>

STM32建立新工程的问题

                                 关于STM32建立新工程的问题!在设置C/C++页面时的定义预处理符号,我定义的是USE_STDPERIPH_DRIVER,STM32F10X_CL。 ...…

查看全部问答>

我先学学stm,大家推荐一下开发板

我想学习一下stm32的芯片,请大家推荐一下开发板,需要买的开发板或者下载器,最少需要买多少东西。 先谢谢大家了,发现现在学avr成本比较高,应用也一般般…

查看全部问答>