找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3091|回复: 1
收起左侧

LCD1602如何控制自行车速度 附单片机代码+仿真图

  [复制链接]
ID:469417 发表于 2019-1-28 23:31 | 显示全部楼层 |阅读模式
pp.jpg

单片机源码:
#include <reg51.h>
#include <intrins.h>
#define uchar        unsigned char
#define uint    unsigned int
sbit LCM_RS=P3^0;
sbit LCM_RW=P3^1;
sbit LCM_EN=P3^7;
uchar Data1[10] = "This is ";
#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<k;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;
}

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 display()
{

        STR();
        DisplayListChar(0,1,str0);
           DisplayListChar(0,0,str1);
}

0.png
全部资料51hei下载地址:
如何控制自行车速度.rar (17.6 KB, 下载次数: 46)

评分

参与人数 7黑币 +143 收起 理由
找人PK + 8 很给力!
Trump1438 + 15 很给力!
Sawardeakar + 15 赞一个!
jinsheng7533967 + 35 很给力!
#include51.h + 12 很给力!
shuisheng60 + 8 绝世好帖!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:472242 发表于 2019-2-5 22:53 | 显示全部楼层
很好用的资料,收下了

评分

参与人数 2黑币 +47 收起 理由
找人PK + 12
shuisheng + 35

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表