历史上的今天
返回首页

历史上的今天

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

正在发生

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

2019-11-09 来源:51hei

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

        }

}

推荐阅读

史海拾趣

芯邦(Chipsbank)公司的发展小趣事

近年来,芯邦科技的营收规模逐渐增大,从2020年到2022年,公司的营业收入分别达到了0.99亿元、1.75亿元和1.92亿元。尽管增速呈现下降趋势,但芯邦科技在电子行业中依然保持着稳健的市场表现。同时,公司也注重研发投入,不断提升产品的技术水平和市场适应性。

Electronicon Kondensatoren GmbH公司的发展小趣事

ELECTRONICON一直注重技术创新和品质保证。公司不断投入研发资金,引进先进技术和设备,以确保产品的质量和性能始终处于行业领先地位。同时,ELECTRONICON还建立了完善的质量管理体系,从原材料采购到产品出厂的每一个环节都进行严格的质量控制。

Honeywell公司的发展小趣事

背景:随着科技的进步,霍尼韦尔开始将目光投向更广阔的领域,其中航空航天成为重要的发展方向。

发展:霍尼韦尔在航空航天领域取得了多项技术突破,其仪器仪表和控制系统在多个重要项目中发挥了关键作用。其中,最著名的莫过于1969年阿波罗11号登月任务中,霍尼韦尔的仪器仪表为宇航员提供了稳定的控制和导航支持。

关键事件:阿波罗11号任务的成功不仅展示了霍尼韦尔在航空航天领域的实力,也进一步提升了公司的国际声誉和市场地位。

Altera (Intel)公司的发展小趣事

背景:近年来,随着全球对可持续发展和数字化转型的重视,霍尼韦尔积极调整战略方向。

发展:公司加大了在可持续技术和数字化转型领域的投入,推出了一系列创新的产品和解决方案。例如,在能源转型领域,霍尼韦尔与多家中国合作伙伴共同推动可持续航空燃料生产基地的建设;在智慧建筑领域,与腾讯云合作打造联合解决方案等。

关键事件:这些举措不仅体现了霍尼韦尔对可持续发展的承诺和责任担当,也展示了公司在数字化转型方面的前瞻性和创新能力。同时,这些合作也进一步巩固了霍尼韦尔在全球电子行业的领先地位。

Advanced Ceramic X Corporation公司的发展小趣事

背景:进入20世纪后,霍尼韦尔在恒温器领域的技术不断成熟,同时,另一家名为霍尼韦尔供暖专业公司的企业也在加热器领域取得了显著成就。

发展:1927年,明尼阿波利斯热调节器公司与霍尼韦尔供暖专业公司合并,创立了明尼阿波利斯-霍尼韦尔调节器公司。这次合并不仅增强了公司的技术实力,还拓展了业务范围,使公司成为当时最大的高品质珠宝钟表生产商(尽管这与电子行业的直接关联较小,但反映了公司扩张的雄心)。

关键事件:合并后,公司继续深耕工业自动化领域,并收购了布朗仪器公司,进一步巩固了在全球工业控制器和指示器市场的领导地位。

Ferraz Shawmut(Mersen)公司的发展小趣事

随着电子行业的快速发展和市场竞争的加剧,Mersen面临着越来越多的挑战。然而,公司始终坚持以客户为中心的理念,通过深入了解客户需求和市场趋势,不断推出符合市场需求的新产品和技术解决方案。同时,公司也加强了与全球合作伙伴的合作与交流,共同应对市场挑战并推动行业发展。

以上五个故事概述了Ferraz Shawmut(现更名为Mersen)在电子行业中的关键发展历程。通过不断创新、全球扩张和积极应对市场挑战,公司成为了电气保护领域的领先企业。

问答坊 | AI 解惑

DSP FPGA在高速高精运动控制器中的应用

摘要:数字信号处理器具有高效的数值运算能力,并能提供良好的开发环境,而可编程逻辑器件 具有高度灵活的可配置性。本文描述了通过采用TMS320C32浮点DSP和可编程逻辑器件(FPGA)的组合运用来构成高速高速高精运动控制器,该系统通过B样条插值算 ...…

查看全部问答>

关于MSP430F单片机的调试

上次的摇摇棒,也就是TI的MSP430F单片机,怎么也不能硬件调试,不知是软件的问题,还是并口仿真器的问题? 我用的是: …

查看全部问答>

有选I 题的吗 进来吧

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 里面的哪个 led灯的横流驱动怎么做啊  …

查看全部问答>

数据通信技术概要

数据通信技术概要…

查看全部问答>

基于单片机的万能遥控设计与实现

        运用ISD1760芯片的录音功能来录制其他遥控发出的红外波,以此原理设计一个万能遥控。 重点需要研究的问题:       ISD1760录音、无线收发模块。     麻烦大家给个思路,,参考·· ...…

查看全部问答>

nk执行过程中死机?

下载NK到开发板后执行,到最后一部应该显示如下红色部分代码时却执行不下去了。请问怎样才能检测内核程序是死在 哪里了? ERROR: OALIntrReleaseSysIntr: Invalid sysIntr value 0 UfnClientLib!UfnCheckPID: WARNING -- using MS reference pl ...…

查看全部问答>

有关发帖的建议

能不能要求楼主们发帖的时候弄点预览啥的,有时候资源下下来根本对自己不适用,岂不是浪费网站资源和芯币…

查看全部问答>

ATmega16 I/O寄存器空间分配表

excle表格批注弹出说明形式,写程序时方便查询,可与芯片手册配合使用,发个简图: < 十六进制地址名   称功        能位7位6位5位4位3位2位1位0 ...…

查看全部问答>

XSscale用什么编译器效率最高额? 怎么支持MMX? 菜鸟求指导

RT XSscale用什么编译器效率最高额? 怎么支持MMX? 菜鸟求指导…

查看全部问答>

请教stm32低功耗问题

现在我使用STM32已经可以进入到stop模式,也可以使用RTCAlarm_IRQn唤醒,但是我发现一个问题,我设置的rtc alarm唤醒时间为1秒中,使用指令为RTC_SetAlarm(RTC_GetCounter()+1);但是唤醒时间却变成了2秒唤醒一次。我试着将时间修改成3秒、5秒,测试 ...…

查看全部问答>