历史上的今天

今天是:2024年11月09日(星期六)

2019年11月09日 | 单片机测速与1602显示程序与电路

发布者:自由思想 来源: 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)

                {

                                UART1_SendStr("key2");

                                while(!key2);

     }

                          write_com(0x80);

                 write_data(number_table[speed1]);         

                 write_data(number_table[speed]);

        }

}

[1] [2]
关键字:单片机  测速  1602显示 引用地址:单片机测速与1602显示程序与电路

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

推荐阅读

人工智能是一项人们寄予厚望,去改变世界的技术。对于普通人而言,现在出现的电销机器人、伪技术、智能家居等与他们脑海中所构想的人工智能仍然有着很大的区别。在人们眼中,人工智能理应是《天眼》里的鹰眼;理应是《光环》里的科塔娜;也理应是《终结者》中的大boss。人工智能不断的在给人类世界带来新的推动力和新的畅想,同时带给人们的也有不断的话...
单片机源程序如下://LED点阵时钟程序//作者:刘宁 //--------------------------------#include "reg52.h"#define uchar unsigned char#define uint unsigned int//========================//****滚屏事件定义****#define MSG_MV_L 1 //左移#define MSG_MV_R 2 /...
机器人市场正在蓬勃发展。国家统计局数据显示,工业机器人需求自 3 月以来持续复苏,9 月单月产量达 2.32 万台,同比增长 51.4%,产量再创历史新高;服务机器人产量也实现了单月 70%以上的同比增速。 在这种大环境下,机器人行业如何进行推广?如何让机器人更好地服务于社会? 10 月 28 日,在深圳市工业与信息化局、深圳市福田区人民政府指...
一、使用proteus绘制简单的电路图,用于后续仿真二、编写程序/********************************************************************************************************************---- @Project: LED-74HC595---- @File: main.c---- @Edit: ZHQ---- @Version: V1.0---- @CreationTime: 20200627---- @ModifiedTime: 20200627---- @Description: 数...

史海拾趣

问答坊 | AI 解惑

单片机C语言集锦

收集的单片机C语言编程集锦,与大家共享!喜欢的顶下吧!…

查看全部问答∨

Intel Atom系统显示驱动4.0版

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 Intel Atom系统显示驱动4.0版 和Atom处理器配套是945GC+ICH7芯片组,虽然945GC 的原型945G系列的显示驱动已经不再更新,不过intel 对945GC 却是关爱有加,专门为其开发有专用驱动,而且还保持 ...…

查看全部问答∨

wince下usb转串口问题

小弟最近在做wince上面的usb转串口驱动,用的是public下面的usbser,编译到系统里面后能识别usb转串口的线了,并模拟为串口1,但是操作的时候用一款usb转串口线只能收,发不出来,用另外一款收发都有数但是数不对现象就像是串口速率不一样,但是这 ...…

查看全部问答∨

请教!ACER C300的EASYPORT 笔记本扩展接口一个 是否可以改装成USB接口?

请教!ACER C300的EASYPORT 笔记本扩展接口一个 是否可以改装成USB接口? 请教!ACER C300的EASYPORT 笔记本扩展接口一个 是否可以改装成USB接口? 还有如何提取内置在笔记本中的EASYPORT的驱动? 谢谢!13956302025  heroxgy@163.com&n ...…

查看全部问答∨

mobile sdarm

各位同仁,大家好. 首先我向各位同仁表示歉意,在此留下广告信息. 我公司是韩国FIDELIX半导体. www.fidelix.co.kr 我公司的主要产品是PSRAM,MOBILE SDRAM,MOBILE DDR(KGD/BGA) 哪位同仁有相 ...…

查看全部问答∨

请教一下:关于GPIO的,

本帖最后由 dontium 于 2015-1-23 13:38 编辑 这是我的程序: #include \\"DSP28_Device.h\\" #include \\"DSP28_Globalprototypes.h\\" // Prototype statements for functions found within this file. // interrupt void ISRTimer2( ...…

查看全部问答∨

关于欠压保护?

SVSCTL|=VLDON; if (SVSCTL&BIT1)//为1时,欠压 { P2OUT&=~BIT0;//报警 LCDM9=0x20;//显示“欠压” } 这样能实现吗?刚开启就判断是不是判断不出来啊,有必要加个延时吗?如果延时沿多长时间呢? 谢谢啊!…

查看全部问答∨

TI公司提供的MSP430C源代码

初学430的同胞可以看看…

查看全部问答∨

闲来无事做个呼吸灯

#include \"msp430f5529.h\"//P2.1 TA1.2void delay(unsigned int ms){  int x,y;  for(x=ms; x>0; x--)    for(y=500; y>0;y--);}int i;//设置占空比unsigned char dir; //i增减方向,非0为增int main( void ){  ...…

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

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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