单片机测速与1602显示程序与电路

2019-11-09来源: 51hei关键字:单片机  测速  1602显示

STC12C单片机控制
光传感器测速
PWM控制直流电机


部分代码预览:

#include"mytype.h"  //包含总合的头文件


#define DATA P2    //定义P0口为数据端


//定义按键I/O口

sbit key0=P0^6;                //正反转、停止模式切换按键

sbit key1=P0^7;                //加速按键

sbit key2=P0^2;        

sbit key3=P0^1;        //减速按键

//sbit PWM=P0^0;

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

uchar   table2[16]="     _DGUT_     ";//第1行液晶显示

uchar  table1[16]= "000  Chen ZiXing";//第2行液晶显示

uchar  number_table[10]="0123456789";

sbit lcden=P3^2;//液晶使能端

sbit lcdrs=P3^5;//液晶读写控制端

sbit wela=P3^3;

//uchar number;

uchar ge=0,shi=0,bai=0;

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

//定义全局变量flag=0,

uchar speed=0,speed1=0;  //正反转的标志位,0停止,1正转,2反转

uint  num;   //定时器1的计数变量

int quan;


void delay(uint z)//延时函数

{

        uint x,y;

        for(x=z;x>0;x--)

                for(y=310;y>0;y--);

}

void write_com(uchar com)//液晶写地址函数

{

        lcdrs=0;

        P2=com;

        delay(5);

        lcden=1;

        delay(5);

        lcden=0;

}

void write_data(uchar date)//液晶写数据函数

{

        lcdrs=1;

        P2=date;

        delay(5);

        lcden=1;

        delay(5);

        lcden=0;

}

void init()//液晶初始化函数

{


        wela=0;

        lcden=0;

        write_com(0x38);

        write_com(0x0c);

        write_com(0x06);

        write_com(0x01);

}

void Lcd_display()//液晶显示函数,主要是刷新转速专用

{

        uint i;

        table1[0]=number_table[bai];

        table1[1]=number_table[shi];

        table1[2]=number_table[ge];


        write_com(0x80+0x40);

        for(i=0;i<3;i++)

        {

                 write_data(table1[i]);

                delay(1);

        }

}

void main()

{         

        

        uchar number;

        time_init();    //定时器初始化

        PWM_Init();     //PWM初始化        

        UART1_Init(9600);//串口初始化

        DATA=0x00;      //数据端初始化为0

        init();


        write_com(0x80);

        for(number=0;number<16;number++)

        {

                write_data(table2[number]);

                delay(10);

         }

         write_com(0x80+0x40);

         for(number=0;number<16;number++)

         {

                 write_data(table1[number]);

                delay(10);

        }

        

        PWM_SET(46,0);//进去先让电机速度为零

        

        while(1)

         { 

                 keyscan();                                                        //按键扫描                   

                 

        /******用定时器1计算时间,每1秒算一次速度直接显示*******/

                 if(num>=20)//num 是T1计数器计数变量,numG=20时为1秒

                 { 

                         TR0=0;TR1=0;//关定时器0/1中断

                         

                                 num=0;//计数变量清零

                         

                                 ge=quan%10;quan=quan/10;

                                 shi=quan%10;quan=quan/10;

                                 bai=quan%10;


                                 Lcd_display();        //LCD显示控制                         

                                 quan=0;//圈数记录清零

                                TR1=1;TR0=1;        //开定时器0/1中断

                 }


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

                           

         }


}


void time_init()

{

  TMOD=0x15;               //设置定时器0为计数模式,定时器1为定时模式,都为工作方式1

        TH0=(65536-1)/256;     

        TL0=(65536-1)%256;

        TH1=(65536-45872)/256;

        TL1=(65536-45872)%256;        

        ET0=1;                                        //开定时器0中断

        TR0=1;                                        //启动定时器0

        ET1=1;                                        //开定时器1中断

        TR1=1;                                        //启动定时器1    

        EA=1;                                 //开启总中断

}


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

//函数:keyscan()

//功能:实现按键扫描、同时控制电机速度

//

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

void keyscan()

{

        if(key0==0||key1==0||key2==0)

        {

                delay_ms(10);//延时去抖

                if(key0==0)

                {

                        UART1_SendStr("a");

                        

                        if(speed<9)speed++;

       else if(speed1<9){speed=0;speed1++;}

//                        else speed=9;

                        PWM_SET(speed1*10+speed,0);

                        while(!key0);

                }

                else if(key1==0)

                {

                                UART1_SendStr("q");

                                if(speed>0)speed--;

                          else if (speed1>0){speed1--;speed=9;}

                        PWM_SET(speed1*10+speed,0);

                                while(!key1);

     }

                else if(key2==0)

{

[1] [2]
关键字:单片机  测速  1602显示 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic479496.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:基于单片机PWM的直流电机调速系统+H桥驱动电路驱动原理图
下一篇:51单片机+编码器+42步进电机的源程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

小家电热销带动盛群,新唐单片机出货量激增
由于今年白色小家电需求依旧热络,10月开始一波急单带动IC设计盛群(6202)、新唐(4919)MCU出货量增,加上年底耶诞节购物需求,及上半年库存去化告一段落,第四季业绩将优于第三季,全年营运可望倒吃甘蔗。10月相关白牌小家电零组件IC出现节前急单拉货潮,盛群表示,10月开始,已感受到订单回流迹象,客户及终端库存去化、中国双11及年底拉货旺季到来,且中国去美化政策逐季发酵,客户拉货态度转趋积极。上半年受到贸易战影响,客户拉货态度观望,下半年库存水位已降至低点,MCU厂在客户要求下,于10月备妥急单需求,主要以小家电商品IC为主,第四季进入全年出货旺季,法人预估今年第四季MCU厂业绩可望成为全年最高点。
发表于 2019-11-11
AVR单片机红外遥控键值解码实验
AVR学习笔记十八、红外遥控键值解码实验  18.1 实例功能 红外线遥控是目前使用最广泛的一种通信和遥控手段。由于红外线遥控装置具有体积小、功耗低、功能强、成本低等特点,因而,继彩电、录像机之后,在录音机、音响设备、空凋机以及玩具等其它小型电器装置上也纷纷采用红外线遥控。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 在这个实验中,我们采用红外线遥控器和一体化红外接收头来进行红外遥控键值解码的实验,本实例分为三个功能模块,分别描述如下: ● 单片机系统:利用 ATmega16单片机与一体化红外接收器组成红外接收电路。 
发表于 2019-11-11
AVR单片机红外遥控键值解码实验
AVR单片机跑马灯的仿真设计
简易的跑马灯设计。基于AVR单片机仿真原理图如下:单片机源程序如下:/********************************************************************                            汇诚科技*********************************************************************/#include <iom16v.h>
发表于 2019-11-11
AVR单片机跑马灯的仿真设计
直流有刷伺服控制系统(pic单片机,pid控制)
基于PIC18系列单片机的直流有刷伺控制系统:(来处于国外贴)1:原理图(PDF)2:原理图及PCB图(EAGLE)3:带pid + 编码器的控制程序。main.c电路原理图如下: 单片机源程序如下:// Vertical motor driver code // Oringially made by Kevin Wolfe 2009-2011// Modified by Matt Moses 2010-2011// #include <p18f1320.h>//#include <stdlib.h>//#include <delays.h>//#include
发表于 2019-11-11
直流有刷伺服控制系统(pic单片机,pid控制)
PWM控制MOSFET搭建的H桥电路驱动直流电机仿真与单片机源码
PIC单片机 proteus H桥驱动直流电机PWM控制MOSFET搭建的H桥电路驱动直流电机运行仿真原理图如下(proteus仿真工程文件可到本帖附件中下载) 1.正转-> 2.停止-> 3.反转-> 4.停止调整到高速时会观察到电机好象在逆向及慢速转动的效果,这是正常的.实际正反转速显示在电机下方(高电平有效状态)全桥正向时P1A有效,P1D调制全桥反向时P1C有效,P1B调制单片机源程序如下://-----------------------------------------------------------------//  名称: 用PIC16F690设计的PWM控制器控制H桥
发表于 2019-11-11
PWM控制MOSFET搭建的H桥电路驱动直流电机仿真与单片机源码
电池容量测试仪电路与源码(PIC16F1938单片机+AD623实现)
分享一个由PIC16F1938单片机芯片和AD623构成的电池容量测试仪.电路原理图如下:电池容量测试仪的pic单片机源码:#include    "main.h" //------------------------32MHZ---------------------------------------------- __CONFIG(FOSC_INTOSC & CLKOUTEN_OFF & BOREN_ON & PWRTE_ON & CPD_OFF          &CP_ON
发表于 2019-11-11
电池容量测试仪电路与源码(PIC16F1938单片机+AD623实现)
小广播
何立民专栏 单片机及嵌入式宝典

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

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