单片机自行车测速系统+源程序+proteus仿真

发布者:糖三角最新更新时间:2019-12-11 来源: elecfans关键字:单片机  自行车测速系统  proteus仿真 手机看文章 扫描二维码
随时随地手机看文章

自行车测速系统仿真原理图如下

单片机源程序如下:

#include "d:c51reg51.h"

#include "d:c51intrins.h"



sbit LCM_RS=P3^0;

sbit LCM_RW=P3^1;

sbit LCM_EN=P3^7;


#define BUSY                  0x80              //常量定义

#define DATAPORT         P1

#define uchar                 unsigned char

#define uint                   unsigned int

#define L                        50


uchar str0[16],str1[16],count;

uint speed;

unsigned long time;


void ddelay(uint);

void lcd_wait(void);

void display();

void initLCM();

void WriteCommandLCM(uchar WCLCM,uchar BusyC);

void STR();

void account();



/*********延时K*1ms,12.000mhz**********/


void int0_isr(void) interrupt 0         /*遥控使用外部中断0,接P3.2口*/

{

    unsigned int temp;

        time=count;

    TR0=0;

        temp=TH0;

        temp=((temp << 8) | TL0);

    TH0=0x3c;

    TL0=0xaf;

        count=0;

    TR0=1;

        time=time*50000+temp;

}


void time0_isr(void) interrupt 1        /*遥控使用定时计数器1 */

{

   TH0 =0x3c;

   TL0 =0xaf;

   count++;

}


void main(void)

{

           TMOD=0x01;                       /*TMOD T0选用方式1(16位定时) */

    IP|=0x01;                           /*INT0 中断优先*/

    TCON|=0x11;                         /*TCON  EX0下降沿触发,启动T0*/

    IE|=0x83;  

    TH0=0x3c;

    TL0=0xaf;

  

        initLCM();

           WriteCommandLCM(0x01,1);                    //清显示屏

        for(;;)

        {

                account();

                display();

        }

}


void account()

{

        unsigned long a; 

        if (time!=0)

        {

                a=L*360000000/time;

        }

        speed=a;

}




void STR()

{

        str0[0]='S';

        str0[1]='p';

        str0[2]='e';

    str0[3]='e';

        str0[4]='d';

        str0[5]=' ';        

        str0[6]=(speed%100000)/10000+0x30;

        str0[7]=(speed%10000)/1000+0x30;

        str0[8]=(speed%1000)/100+0x30;

        str0[9]='.';

        str0[10]=(speed%100)/10+0x30;

        str0[11]=speed%10+0x30;

        str0[12]='k';

        str0[13]='m';

        str0[14]='/';

        str0[15]='h';

}


void ddelay(uint k)

{

    uint i,j;

    for(i=0;i    {

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

                {;}

    }

}

/**********写指令到LCD子函数************/


void WriteCommandLCM(uchar WCLCM,uchar BusyC)

{

    if(BusyC)lcd_wait();

        DATAPORT=WCLCM;

    LCM_RS=0;                   /* 选中指令寄存器*/

    LCM_RW=0;                       // 写模式

    LCM_EN=1;

        _nop_();

        _nop_();

        _nop_();

    LCM_EN=0;


}


/**********写数据到LCD子函数************/


void WriteDataLCM(uchar WDLCM)

{

    lcd_wait( );            //检测忙信号

        DATAPORT=WDLCM;

    LCM_RS=1;               /* 选中数据寄存器  */

    LCM_RW=0;                   // 写模式

    LCM_EN=1;

    _nop_();

        _nop_();

        _nop_();

    LCM_EN=0;

}


/***********lcd内部等待函数*************/


void lcd_wait(void)

{

    DATAPORT=0xff;             //读LCD前若单片机输出低电平,而读出LCD为高电平,则冲突,Proteus仿真会有显示逻辑黄色

        LCM_EN=1;

    LCM_RS=0;

    LCM_RW=1;

    _nop_();

    _nop_();

        _nop_();

    while(DATAPORT&BUSY)

        {  LCM_EN=0;

           _nop_();

           _nop_();

           LCM_EN=1;

           _nop_();

           _nop_();

        }

           LCM_EN=0;


}


/**********LCD初始化子函数***********/

void initLCM( )

{

        DATAPORT=0;

        ddelay(15);

        WriteCommandLCM(0x38,0);    //三次显示模式设置,不检测忙信号

    ddelay(5);

    WriteCommandLCM(0x38,0);

    ddelay(5);

    WriteCommandLCM(0x38,0);

    ddelay(5);


    WriteCommandLCM(0x38,1);    //8bit数据传送,2行显示,5*7字型,检测忙信号

    WriteCommandLCM(0x08,1);    //关闭显示,检测忙信号

    WriteCommandLCM(0x01,1);    //清屏,检测忙信号

    WriteCommandLCM(0x06,1);    //显示光标右移设置,检测忙信号

    WriteCommandLCM(0x0c,1);    //显示屏打开,光标不显示,不闪烁,检测忙信号

}


/****显示指定坐标的一个字符子函数****/


void DisplayOneChar(uchar X,uchar Y,uchar DData)

{

    Y&=1;

    X&=15;

    if(Y)X|=0x40;               //若y为1(显示第二行),地址码+0X40

    X|=0x80;                    //指令码为地址码+0X80

    WriteCommandLCM(X,0);

    WriteDataLCM(DData);

}


/*******显示指定坐标的一串字符子函数*****/


void DisplayListChar(uchar X,uchar Y,uchar *DData)

{

    uchar ListLength=0;

    Y&=0x01;

    X&=0x0f;

    while(X<16)

    {

        DisplayOneChar(X,Y,DData[ListLength]);

        ListLength++;

        X++;

    }

}



void display()

{


        STR(); 

        DisplayListChar(0,0,str0);

           DisplayListChar(0,1,str1);

}



关键字:单片机  自行车测速系统  proteus仿真 引用地址:单片机自行车测速系统+源程序+proteus仿真

上一篇:GP2Y0E02B测距模块89c52单片机串口程序
下一篇:单片机+ULN2003A步进电机控制系统(正反转+加减速)

推荐阅读最新更新时间:2024-11-17 07:47

浅析FPGA车用MCU设计方案
  在 汽车电子 中广为采用的微控制器( MCU )正快速面临时间和成本的压力。使用MCU的主要优势一直以来都是‘创造具有高性价比的高阶系统整合’。然而,在此一优势之下,有一些与元件本身相关的潜在成本是超乎于其单价水平的。例如,若选用的元件无法创造所需特性,则必须增加外部逻辑、软体或其它整合元件。   再者,目前汽车终端市场对于需求的变化屡见不鲜,以至MCU很快就变得不适用;许多具有专门特性以及固定专用介面数量的MCU,经过短暂的评估后即无法满足市场需求。因此,系统供应商不得不重新设计硬体及编写相关软体,在某些情况下,甚至必须更换处理器核心。   MCU的困境   MCU制造商正被迫面对会为整个市场带来巨大影响的挑战。MCU是针对
[嵌入式]
英飞凌与格芯延长汽车微控制器长期供应协议
【2024年1月29日,德国慕尼黑和美国纽约州马耳他讯】英飞凌科技股份公司(GlobalFoundries)近日宣布, 就英飞凌的AURIX™ TC3x 40纳米汽车微控制器以及电源管理和连接解决方案达成一项新的多年期供应协议 。这一新增产能的锁定将有助于满足英飞凌2024年至2030年的业务增长需求。 英飞凌和格芯自2013年以来一直在合作开发差异化的汽车类、工业类和安全类半导体技术与产品。此次合作主要围绕高可靠性的嵌入式非易失性存储器(eNVM)技术解决方案展开,该解决方案非常适合用于实现任务关键型汽车应用,并且能够满足新一代汽车系统严格的功能安全和信息安全要求。英飞凌的旗舰级微控制器系列AURIX推动了汽车行业向自动驾驶
[汽车电子]
英飞凌与格芯延长汽车<font color='red'>微控制器</font>长期供应协议
Atmel推出用于汽车LIN联网应用的AVR微控制器
爱特梅尔公司 (Atmel® Corporation) 宣布推出用于汽车 LIN 联网应用的全新AVR® 8位微控制器产品。ATtiny87 为 AVR® 系列的第二款产品,有关系列是专为高成本效益之 LIN 从 (slave) 模式应用而优化的 LIN 专用低引脚数器件。 许多车身电子子系统,如车门锁、车窗升降、雨刷、照明系统、阳光和落雨传感器等都通过 LIN 网络连接,这需要多个带有模拟/数字转换器的微型 LIN 控制器,用于传感器信号格式化;以及一个多用途的 16 位定时器。ATtiny87 包括具有在从 (slave) 模式自动进行波特率同步功能 (automatic baud rate synchro
[汽车电子]
基于AT89C51单片机的交通灯控制系统设计与仿真
0 引言 随着微控技术的日益完善和发展,单片机的应用不断走向深入。它的应用必定导致传统的控制技术从根本上发生变革。它在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到广泛的应用,极大地提高了这些领域的技术水平和自动化控制。同时,伴随着我国经济的高速发展,私家车、公交车的增加,无疑会给我国的道路交通系统带来沉重的压力,很多大城市都不同程度地受到交通堵塞问题的困扰。为解决交通堵塞问题,采用AT89C51单片机为核心,与74LS86与74LS04组成特殊情况控制电路、七段数码管及LED组成显示电路,设计出以人性化、智能化为目的的交通灯控制系统,如遇特殊情况可人为控制交通从而解决交通堵塞的实际问题,整个电路简单,易于实现。
[单片机]
基于AT89C51<font color='red'>单片机</font>的交通灯控制<font color='red'>系统</font>设计与仿真
STM32单片机的八种IO口模式解析
STM32八种IO口模式区别 (1)GPIO_Mode_AIN模拟输入 (2)GPIO_Mode_IN_FLOATING浮空输入 (3)GPIO_Mode_IPD下拉输入 (4)GPIO_Mode_IPU上拉输入 (5)GPIO_Mode_Out_OD开漏输出 (6)GPIO_Mode_Out_PP推挽输出 (7)GPIO_Mode_AF_OD复用开漏输出 (8)GPIO_Mode_AF_PP复用推挽输出 以下是详细讲解 (1)GPIO_Mode_AIN模拟输入 即关闭施密特触发器,将电压信号传送到片上外设模块(不接上、下拉电阻) (2)GPIO_Mode_IN_FLOATING浮空输入 浮空输入状态下,IO的电平状态是不确定
[单片机]
STM32串口通信基础:单片机串口与PC串口通信的连接方式
按照数据传送方向分类 单工:数据传输只支持数据在一个方向上传输 半双工:允许数据在两个方向上传输。但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;它不需要独立的接收端和发送端,两者可以合并一起使用一个端口 全双工:允许数据同时在两个方向上传输。因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端 分别如下图中的a、b、c所示。 按照通信方式分类 同步通信:带时钟同步信号传输。比如:SPI,IIC通信接口 异步通信:不带时钟同步信号。比如:UART(通用异步收发器),单总线 在同步通讯中,收发设备上方会使用一根信号线传输信号,在时钟信号的驱动下双方进行协调,同步数据。例如,通讯中
[单片机]
STM32串口通信基础:<font color='red'>单片机</font>串口与PC串口通信的连接方式
瑞萨电子将展示首颗基于Cortex M85内核的RA系列MCU
瑞萨电子日期宣布,它将与6月纽伦堡Embedded World 2022上现场演示基于Arm Cortex-M85内核的微控制器 (MCU)。 瑞萨电子于 2019 年 10 月推出了基于 Arm Cortex-M 的 RA(瑞萨高级)系列 MCU,凭借强大且功能丰富的基于闪存的 MCU 系列进入通用 Arm-Cortex-M 市场。在大约 30 个月的时间里,瑞萨电子迅速占据了领导地位,推出了 17 个 MCU 系列,超过 200 个产品。此外,瑞萨电子还开发了一个强大的合作伙伴生态系统,为客户提供物联网、人工智能/机器学习、工业自动化、医疗、楼宇自动化、家用电器和其他多种应用的综合解决方案。 “作为 Arm 的主要合作
[单片机]
意法半导体(ST)新的32位系列Cortex-M3内核微控制器重塑MCU市场
STM32 MCU系列大幅度提高了嵌入式系统的性价比和功耗水准 中国,2007年6月11日 — 世界领先的半导体制造厂商意法半导体(纽约证券交易所:STM)今天推出一个新的32位微控制器系列产品,新产品所用微处理器是ARM公司为要求高性能(1.25 Dhrystone MIPS/MHz)、低成本、低功耗的嵌入式应用专门设计的ARM Cortex-M3内核。STM32系列产品得益于Cortex-M3在架构上进行的多项改进,包括提升性能的同时又提高了代码密度的Thumb-2指令集和大幅度提高中断响应的紧耦合嵌套向量中断控制器,所有新功能都同时具有业界最优的功耗水平。ST是Cortex-M3内核开发项目的一个主要合作方,现在是第一个
[新品]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved