单片机源程序如下:

#include "AT89X51.h"


int delay();

void inti_lcd();

void show_lcd(int);

void cmd_wr();

void ShowState();

void clock(unsigned int Delay) ;

void DoSpeed();       //计算速度

//正转值

#define RIGHT_RUN 1

//反转值

#define LEFT_RUN 0

sbit RS=0xA0;

sbit RW=0xA1;

sbit E=0xA2;


char SpeedChar[]="SPEED(n/min):";

char StateChar[]="RUN STATE:";

char STATE_CW[]="CW";

char STATE_CCW[]="CCW";

char SPEED[3]="050";

unsigned int RunSpeed=50;                //速度

unsigned char RunState=RIGHT_RUN;  //运行状态

main()

{

       

        /*定时器设置*/

        TMOD=0x66;            //定时器0,1都为计数方式;方式2;

        EA=1;                        //开中断

       

        TH0=0xff;                //定时器0初值FFH;

        TL0=0xff;

        ET0=1;

        TR0=1;       

       

        TH1=0xff;                //定时器1初值FFH;

        TL1=0xff;

        ET1=1;

        TR1=1;

          

        IT0=1;                        //脉冲方式

        EX0=1;                        //开外部中断0:加速

        IT1=1;                        //脉冲方式

        EX1=1;                        //开外部中断1:减速

   

    inti_lcd();

    DoSpeed();      

    ShowState();

    while(1)

    {

      clock(RunSpeed);

      P0_1=P0_1^0x01;

    }

   

}


//定时器0中断程序:正转

void t_0(void) interrupt 1

{

        RunState=RIGHT_RUN;       

    P0_0=1;

    P1=0x01;

    cmd_wr();

    ShowState();

}



//定时器1中断:反转

void t_1(void) interrupt 3

{

        RunState=LEFT_RUN;

    P0_0=0;

    P1=0x01;

    cmd_wr();

    ShowState();

   

}


//中断0:加速程序

void SpeedUp() interrupt 0

{   

       if(RunSpeed>=12)

          RunSpeed=RunSpeed-2;

       DoSpeed();

       P1=0x01;

       cmd_wr();

       ShowState();

              

}


//中断1:减速程序

void SpeedDowm() interrupt 2

{   

   

    if(RunSpeed<=100)

        RunSpeed=RunSpeed+2;

    DoSpeed();

    P1=0x01;

    cmd_wr();

    ShowState();

        


}


int delay()         //判断LCD是否忙

{   

    int a;

start:

   

    RS=0;

    RW=1;

    E=0;

    for(a=0;a<2;a++);

    E=1;

    P1=0xff;

    if(P1_7==0)

       return 0;

    else        

       goto start;


}


void inti_lcd()  //设置LCD方式

{


   P1=0x38;

   cmd_wr();

   delay();


   P1=0x01;     //清除

   cmd_wr();

   delay();


   P1=0x0f;

   cmd_wr();

   delay();


   P1=0x06;

   cmd_wr();

   delay();


   P1=0x0c;

   cmd_wr();

   delay();

}


void cmd_wr()           //写控制字

{

   RS=0;

   RW=0;

   E=0;

   E=1;

}


void show_lcd(int i)   //LCD显示子程序

{  

   P1=i;

   RS=1;

   RW=0;

   E=0;

   E=1;


}


void ShowState()    //显示状态与速度

{

    int i=0;

    while(SpeedChar[i]!='')

    {

       delay();

       show_lcd(SpeedChar[i]);

       i++;

    }

   

    delay();

    P1=0x80 | 0x0d;

    cmd_wr();


    i=0;

    while(SPEED[i]!='')

    {

       delay();

       show_lcd(SPEED[i]);

       i++;

    }


    delay();

    P1=0xC0;

    cmd_wr();


    i=0;

    while(StateChar[i]!='')

    {

       delay();

       show_lcd(StateChar[i]);

       i++;

    }


    delay();

    P1=0xC0 | 0x0A;

    cmd_wr();


    i=0;

    if(RunState==RIGHT_RUN)

        while(STATE_CW[i]!='')

        {

          delay();

……………………


关键字:单片机控制  步进电机  LCD1602显示 引用地址:单片机控制步进电机,LCD1602显示

上一篇:51单片机常用知识点
下一篇:51单片机蓝牙小车+TB6612控制

推荐阅读

随着人工智能技术的发展,智能机器人已经进入到生活中的各个方面。并在儿童陪伴、儿童教育方面也开始扮演着重要角色。8月30日上午,由中国高科技行业门户OFweek维科网和高科会主办,OFweek人工智能网承办的2018中国(上海)国际人工智能展览会开幕式在上海跨国采购会展中心成功举行,一场AI行业的展示盛宴隆重拉开帷幕。在这次展览会上,深圳市天博智科技...
根据美国国家公路交通安全管理局(NHTSA)调查显示,在 2017 年约有 37,000 人在美国公路上发生车祸而丧生,其中有 47% 的人没有系上安全带。有鉴于此,Honda 与安全气囊供应商 Autoliv 合作开发了新的前乘客座安全气囊,可以在不同角度发生的撞击中降低颈部与脑部受伤的机率,提升乘客安全。新安全气囊由三个部分组成:一个中央气囊和两个向外突...
  一直以来有不少新手在微控的QQ群和微控技术论坛中经常会问到关在用MSP430设计时碰到3V与5V之间电平互换问题。为此,我大概简明地整理了一份关这3V与5V互换的电路图。希望能帮忙到入门的新手和学生。  电路参考与下图所示     图1:这是一个5V转3V电平的单向电路,其原理为将5V电平分压成3V供MSP430单片机系统。其电阻分配可以取大点(电流功耗的...
8月31日,联合光电在与投资者互动时表示,公司目前AR/VR的客户有小派、大朋、纳德等,2021年上半年,公司AR/VR的出货量同比增长较大,全年出货量将高于去年全年。关于公司定增募投项目,联合光电表示,公司定增募投主要项目为“新型显示和智能穿戴产品智造项目”。项目建成达产后,可实现年产1,800万套车载镜头产品、200万套新型投影镜头产品以及58万套VR/...

史海拾趣

问答坊 | AI 解惑

彩色液晶屏控制驱动板

我司有CSTN、TFT液晶屏控制驱动板,能用51、PIC单片机、DSP控制,能显示256--65536色,价格低廉,编程简单,适合于点阵为320*240  640*480的数字屏,提供各种工控液晶屏,液晶屏驱动方案,控制IC,如有需求,与我联系。  0755-81261729&n ...…

查看全部问答∨

电磁流量计故障检查和分析(二)

第七节 输出信号超满度值检查和采取措施 一、故障原因 输出信号超满度值的故障原因来自4个方面,即:传感器方面、连接电缆方面、转换器方面、连接于转换器输出的后位仪表方面。每个方面又各有多种原因,其主要如下所列: (1)传感器方面--电极 ...…

查看全部问答∨

软件定义无线电(SDR)技术推动测试仪器的发展

测试设备制造商始终面临的挑战是如何开发出能够满足用户最新产品测试需求的新型测试方案,他们通常采用设计专用硬件的方法来应对这一挑战。对于通信市场来说,由于新的通信标准发展迅速,常常需要新的信号源和测量功能,因而带来更大的挑战。为跟上 ...…

查看全部问答∨

求毕业设计 USB数据采集传输

求毕业设计  USB数据采集传输 专业方向:测控技术及仪器 基本理论:单片机技术、usb通讯技术         设计内容:要求学生利用单片机(51)及ISP1581 USB2.0设计一个波形发生器,用按键选择波形,将数据通过USB传出 ...…

查看全部问答∨

两台ARM板的互连问题

使用的SAMSUNG2440芯片,要实现两块板之间的网络互连。现在使用上位机可以和各块板之间连接,可以ping通。 但是在两块ARM板之间的网络总是通不了,不知道是什么原因,该如何解决?…

查看全部问答∨

西安通讯类企业招聘

国内大型通讯类企业招聘 基本条件: 1、电子、通讯类相关专业背景的本科生,一年工作经验 2、上述背景的硕士生,没有工作年限要求 工作职位及薪资待遇: 1、从事软硬件研发、测试及维护工作,工作地点在西安 2、月薪一般6K至7K,视能力而定 3 ...…

查看全部问答∨

我的VS2005中怎么没有wince5.0模拟器

我的VS2005中怎么没有wince5.0模拟器啊,装了Windows   Mobile   5.0   Pocket   PC   SDK之后也还是没有啊,网上也找不到模拟器,郁闷,怎么办啊!…

查看全部问答∨

CE6.0 VMProcessPageFault Error: Page fault occurred while in power handler!

在CE6.0进Sleep的时候经常会出现下面的错误,而且这个错误不是每次都会出现,开机后马上进Sleep一般都没有问题,但操作一会儿后就会发生该错误,而且系统Down机。 VMProcessPageFault Error: Page fault occurred while in power handler! Address ...…

查看全部问答∨

CCS3.3启动慢

CCS3.3启动要几分钟。 重装XP系统和CCS后无效。 有达人知道是怎么回事吗。…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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