历史上的今天
返回首页

历史上的今天

今天是:2024年12月11日(星期三)

正在发生

2019年12月11日 | 单片机自行车测速系统+源程序+proteus仿真

2019-12-11 来源:elecfans

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

单片机源程序如下:

#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);

}



推荐阅读

史海拾趣

Greenwich Instruments Ltd公司的发展小趣事

Greenconn Corp自创立之初便致力于连接器技术的研发与创新。在20世纪末,随着电子产品的普及和通讯技术的飞速发展,连接器作为电子设备间的桥梁,其重要性日益凸显。Greenconn Corp凭借其敏锐的市场洞察力和强大的研发实力,成功研发出了一系列高性能、高可靠性的连接器产品,迅速在汽车电子、通信设备等领域占据了一席之地。这些创新产品不仅满足了市场对连接器高质量、高效率的需求,还推动了整个电子行业的发展。

EICHHOFF公司的发展小趣事

在快速发展的同时,EICHHOFF公司也积极关注环保和可持续发展问题。公司认识到作为电子行业的一员,必须承担起保护环境、节约资源的责任。为此,EICHHOFF公司采取了一系列措施来降低生产过程中的能耗和排放。例如:引入节能设备和技术、优化生产流程、推广绿色包装等。

此外,EICHHOFF公司还积极参与环保公益活动和社会责任项目,为社会做出积极贡献。这些努力不仅提升了公司的社会形象,也为公司的可持续发展奠定了基础。

Essentra Components公司的发展小趣事

Essentra Components公司自创立之初,就深知技术创新在电子行业的重要性。公司通过不断投入研发资源,成功开发出了一系列具有创新性的塑料注塑成型、乙烯基浸塑成型技术,这些技术不仅提高了产品的性能和质量,还大大降低了生产成本。随着技术的不断升级和完善,Essentra Components的产品逐渐在市场上占据了重要地位,公司也因此迅速发展壮大。

Eby Company公司的发展小趣事

为了提供更好的物流服务,eBay推出了国际运送计划(eBay International Shipping)。该计划允许卖家将来自同一订单的多件物品合并在一个包裹中运送,从而减少了买家支付的运费。这一举措不仅提高了物流效率,也增加了买家的购买意愿。eBay还与其他物流公司合作,提供更快捷、更可靠的配送服务。

BUSSMANN公司的发展小趣事

随着汽车工业的快速发展,对熔断器的需求也急剧增加。Bussmann五兄弟敏锐地抓住了这一市场机遇,开始专注于汽车熔断器的研发和生产。他们深入研究汽车电路的特点,不断优化熔断器的设计和性能,使其能够更好地适应汽车的工作环境。凭借这一创新,Bussmann的汽车熔断器迅速占领了市场,为公司的发展奠定了坚实的基础。

Custom Components Inc公司的发展小趣事

Custom Components Inc(简称CCI)公司的发展历程始于一个技术突破。在公司成立的初期,CCI的研发团队成功开发了一种新型的电子元件,这种元件在性能和成本上均优于市场上的同类产品。这一技术突破立即引起了行业的关注,多家电子设备制造商纷纷向CCI抛出橄榄枝,希望建立长期合作关系。

随着市场需求的不断增长,CCI逐步扩大了生产规模,并通过技术创新不断提升产品质量。同时,公司还积极开拓国际市场,与海外客户建立了稳定的业务往来。凭借卓越的产品性能和良好的市场口碑,CCI逐渐在电子行业中崭露头角。

问答坊 | AI 解惑

单片机初学者,请进

本人是一毕业就去了深圳创业,算算时间也有差不多5年了吧,期间一直在做单片机方面的项目开发工作,现在在做嵌入式ARM的相关开发,单片机带给人的乐趣是无穷的。我个人感觉这个行业还是很有前景的。希望在校的大学生们好好利用宝贵时间多学点知识, ...…

查看全部问答>

汽车电子资料大放送~资料、文章、方案...敬请下载~

1.大众车系元件功能与检测资料下载>>https://bbs.eeworld.com.cn/thread-281-1-52.html 2.DS2705主控制器数据资料>> https://bbs.eeworld.com.cn/thread-25994-1-16.html 3.CAN总线在混和动力汽车电机控制系统中的应用>> https://bbs.eeworld ...…

查看全部问答>

mc39i tcp只能收发不了

使用外置协议栈,UDP,收发正常, TCP 3次握手过后 tcp只能接收.发送到 服务端的数据,收不到包, 发收的整个包 协议解析正常…

查看全部问答>

如何定制支持MFC的SDK

现在想把原来在WINCE5.0开发的MFC程序移植到WINCE6.0上面, 但一直不能成功.特来请教下: 我现在的环境是VS2005+WINCE6.0  之前在网上找了下, 说是WINCE6.0默认是不支持MFC的.要手动添加几个DLL文件. 现在我也把 MFC80ENU.DLL加进去了, ...…

查看全部问答>

串口调试工具发送文件和字符串的区别,香水看看

                                 我用串口调试工具来调试STM107的虚拟串口例程,发送同样字节的数据,使用串口调试工具下面的字符串输入就正常,而 ...…

查看全部问答>

单片机测量电流电压

用单片机做一个电压,电流检测装置。 (1)电压的范围:DC10-36V,要求精度1%以内。 (2)电流DC 0.1-3A,要求精度1%以内。         怎么控制这个精度问题?请各位大侠给点意见!…

查看全部问答>

16路量入,16路量出。IO不够用了,用什么芯片扩展呢??

有的人说PCA9534A,有的说输入用244,输出用373。怎么选择呢??…

查看全部问答>

求问FPGA的流水线技术

现在在做一个算法的实现,本来用了迭代结构已经实现了,当我想提高速度用流水线结构实现时,发现最高时钟频率居然比迭代结构时候还低,这个感觉跟理论对不上啊。我就是在迭代结构中需要反馈的信号都换成寄存器了,展开成很多级的。 想请问一下有遇 ...…

查看全部问答>