历史上的今天
返回首页

历史上的今天

今天是:2025年02月20日(星期四)

正在发生

2020年02月20日 | 基于单片机的电机测速proteus仿真+代码

2020-02-20 来源:51hei

基于单片机的电机测速仿真原理图如下

单片机源程序如下:

#include                  //调用单片机头文件

#define uchar unsigned char  //无符号字符型 宏定义        变量范围0~255

#define uint  unsigned int         //无符号整型 宏定义        变量范围0~65535


sbit clk = P1^3;          //ds1302时钟线定义

sbit io =  P1^4;          //数据线

sbit rst = P1^5;          //复位线

                                                           //秒  分   时   日   月  年   星期         

uchar code write_add[]={0x80,0x82,0x84,0x86,0x88,0x8c,0x8a};   //写地址

uchar code read_add[] ={0x81,0x83,0x85,0x87,0x89,0x8d,0x8b};   //读地址

uchar code init_ds[]  ={0x55,0x17,0x15,0x01,0x01,0x13,0x13};   

uchar miao,fen,shi,ri,yue,week,nian;

uchar i;

uchar count = 0,count1 = 0,speed = 0,quan = 0;//中断次数计算,速度

unsigned long speed1,juli,time2;

float f_hz,speed_km,speed_m;


uchar flag_lc = 0;   //开始计算速度使能

uchar flag_stop_en;   //要确定车子是否停下了


uint juli_s;             //每秒走的距离

uint juli_z;         //总路程

float zhijing = 0.55;  //直径 0.55M

uint s_zhijing = 55;



uchar menu_1;        //菜单设置变量

uchar menu_2;        //菜单设置变量


long zong_lc;        //总量程


uchar flag_200ms;

uint shudu;   //定义速度的变量

uint bj_shudu = 80;         //报警速度



//这三个引脚参考资料

sbit rs=P1^0;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit rw=P1^1;         //寄存器选择信号 H:数据寄存器          L:指令寄存器

sbit e =P1^2;         //片选信号   下降沿触发


uchar code table_num[]="0123456789abcdefg";

uchar i;


sbit beep = P3^7;   //蜂鸣器IO口定义




/******************1ms 延时函数*******************/

void delay_1ms(uint q)

{

        uint i,j;

        for(i=0;i                for(j=0;j<120;j++);

}



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

* 名称 : delay_uint()

* 功能 : 小延时。

* 输入 : 无

* 输出 : 无

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

void delay_uint(uint q)

{

        while(q--);

}


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

* 名称 : write_com(uchar com)

* 功能 : 1602命令函数

* 输入 : 输入的命令值

* 输出 : 无

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

void write_com(uchar com)

{

        i =0;

        e=0;

        rs=0;

        rw=0;

        P0=com;

        delay_uint(3);

        e=1;

        delay_uint(25);

        e=0;

}


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

* 名称 : write_data(uchar dat)

* 功能 : 1602写数据函数

* 输入 : 需要写入1602的数据

* 输出 : 无

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

void write_data(uchar dat)

{

        i =0;

        e=0;

        rs=1;

        rw=0;

        P0=dat;

        delay_uint(3);

        e=1;

        delay_uint(25);

        e=0;        

}


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

* 名称 : write_sfm2(uchar hang,uchar add,uchar date)

* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下

                  write_sfm1(1,5,23)

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

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

void write_sfm2(uchar hang,uchar add,uint date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date/10%10);

        write_data(0x30+date%10);        

}


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

* 名称 : write_sfm4(uchar hang,uchar add,uchar date)

* 功能 : 显示2位十进制数,如果要让第一行,第五个字符开始显示"23" ,调用该函数如下

                  write_sfm1(1,5,23)

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

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

void write_sfm4(uchar hang,uchar add,uint date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date/10000%10);

        write_data(0x30+date/1000%10);

        write_data(0x30+date/100%10);        

        write_data(0x30+date/10%10);

        write_data(0x30+date%10);        

        write_data('k');        

        write_data('m');        

}


void write_sfm7(uchar hang,uchar add,uint date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date/100000%10);

        write_data(0x30+date/100000%10);

        write_data(0x30+date/10000%10);

        write_data(0x30+date/1000%10);

        write_data('.');        

        write_data(0x30+date/100%10);        

        write_data(0x30+date/10%10);

        write_data('k');        

        write_data('m');        

}


/***********************lcd1602上显示两位十进制数************************/

void write_sfm1(uchar hang,uchar add,uchar date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(0x30+date % 10);        

}



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

* 名称 : write_string(uchar hang,uchar add,uchar *p)

* 功能 : 改变液晶中某位的值,如果要让第一行,第五个字符开始显示"ab cd ef" ,调用该函数如下

                  write_string(1,5,"ab cd ef;")

* 输入 : 行,列,需要输入1602的数据

* 输出 : 无

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

void write_string(uchar hang,uchar add,uchar *p)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

                while(1)

                {

                        if(*p == '')  break;

                        write_data(*p);

                        p++;

                }        

}



/***********************lcd1602上显示两位十进制数************************/

void write_sfm2_ds1302(uchar hang,uchar add,uchar date)

{

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        write_data(table_num[date / 16]);

        write_data(table_num[date % 16]);        

}


/*****************控制光标函数********************/

void write_guanbiao(uchar hang,uchar add,uchar date)

{                

        if(hang==1)   

                write_com(0x80+add);

        else

                write_com(0x80+0x40+add);

        if(date == 1)

                write_com(0x0f);     //显示光标并且闪烁        

        else 

                write_com(0x0c);   //关闭光标

}         




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

* 名称 : init_1602()

* 功能 : 初始化1602液晶 

* 输入 : 无

* 输出 : 无

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

void init_1602()      //1602初始化

{

        write_com(0x38);

        write_com(0x0c);

        write_com(0x06);

        delay_uint(1000);

        write_string(1,0,"sd:00km/h  00:00");                

推荐阅读

史海拾趣

AZ Displays公司的发展小趣事

随着公司规模的扩大和市场份额的提升,AZ Displays开始实施全球化战略。公司在全球范围内建立销售网络和分支机构,积极开拓国际市场。通过与国际知名企业的合作,AZ Displays成功将产品打入国际市场,进一步提升了公司的品牌影响力和市场竞争力。

Hama公司的发展小趣事

H&D Wireless公司成立于2009年,总部位于瑞典斯德哥尔摩。成立初期,公司专注于物联网技术的研发,致力于提供智能家居Wi-Fi组件和无线多媒体解决方案。2016年,H&D Wireless宣布获得了一笔300万美元的风险投资,投资方包括Blasieholmen Investment Group及旗下网络内的40名瑞典和欧洲企业家与私人投资家。这笔资金为公司后续的全球业务扩张和物联网云服务平台的发布奠定了坚实基础。

DESCO公司的发展小趣事

面对数字化浪潮和智能制造的兴起,DESCO公司积极拥抱变革。公司投入大量资金引进先进的自动化设备和智能化生产线,提高生产效率和产品质量。同时,DESCO还加强了数字化营销和客户服务体系建设,提升了客户体验和市场响应速度。这些举措使公司在激烈的市场竞争中保持了领先地位。

Asia Pacific Microsystems Inc公司的发展小趣事

APM深知在电子行业中,单打独斗很难取得长远的发展。因此,公司开始积极寻求与上下游企业的合作,共同构建完整的产业链。通过与原材料供应商、代工厂商以及终端客户的紧密合作,APM实现了产业链的整合与协同发展。这不仅降低了公司的运营成本,还提高了产品的质量和生产效率,为公司的持续发展奠定了坚实基础。

Aptiv公司的发展小趣事

随着数字化时代的到来,Aptiv积极拥抱数字化转型,通过引入先进的信息技术和管理系统,提升了企业的运营效率和市场竞争力。例如,公司向汽车行业某公司发出EDI对接邀请,计划通过EDI系统实现双方的数据共享和业务协同,从而提高了工作效率和下单准确性。这种数字化转型不仅有助于Aptiv在激烈的市场竞争中保持领先地位,还为整个电子行业的数字化转型提供了有益的借鉴和参考。

这五个故事展示了Aptiv公司在电子行业中的发展历程和成就,从技术创新到全球布局、创新合作、社会责任以及数字化转型等方面,都体现了公司的实力和担当。Aptiv以其卓越的技术实力和市场表现,成为了电子行业中一颗璀璨的明星。

Horizon Electronics Enterprises Group公司的发展小趣事

为了应对市场需求的多样化和技术发展的快速变化,Horizon开始实施多元化产品布局战略。公司不仅继续深耕半导体芯片领域,还逐步拓展至电子元器件、智能设备、物联网解决方案等多个领域。通过自主研发和合作并购等方式,Horizon不断丰富产品线,满足不同客户的多样化需求。这一战略的实施不仅增强了公司的市场竞争力,也为公司的持续发展注入了新的动力。

问答坊 | AI 解惑

再议Linux与WinCE

Linux是单体内核,即将图形、驱动及文件系统等功能全在操作系统内核中实现,运行在内核状态和同一地址空间,其优点是减少了进程间通信和状态切换的系统开销,获得较高的运行效率;缺点是内核比较庞大! WinCE是微内核,即在内核中实现基本功能, ...…

查看全部问答>

求一份关于串联和并联谐振的资料

最近在用线圈耦合做无线识别,用12M做载波,求谐振资料。 有功放或放大或滤波图的来几张,多谢。 芯片也行 xuchaoda@126.com…

查看全部问答>

标准数字电路 54-74HC全系列高速CMOS数据手册(中文

标准数字电路 54-74HC全系列高速CMOS数据手册(中文)…

查看全部问答>

请问这个是怎么理解的设置定时器定时时间

void vSetMotorTimer(unsigned short uiTime)// uiTime us   {      RCAP2LH = uiTime;  }  //重新载入定时数据   void vUpdateMotorTimer(void)  {      T2LH=RCAP2L ...…

查看全部问答>

C#如何捕获inputPanel输入法改变的事件

我是初学,最近被此问题困扰了好多天, 打开inputPanel后,改变输入法,inputPanel的高度会改变,此时如何捕获该事件。 我使用C#,开发环境vs   2005,.net   CF   2.0。 希望解释能详细些,我是初学。 还有我的 ...…

查看全部问答>

PG128128A资料

研究了N就,PG128128A资料到底怎么驱动,谁有能提供详细资料 12864及以下的我会,就是不会PG128128A的 邮箱 zoujun224@qq.com…

查看全部问答>

惭愧啊,st网站上想找点东西太难了

                                 也不知道是自己笨还是网站不太合理,反正在他官网上从来都没找到自己想要的东西,搜到的许多野都是指向其官网,可 ...…

查看全部问答>

5402和GAL16V8D输入端之间需不需要加164245?

请问,在5402和5V供电的GAL16V8D输入端之间需不需要加一片164245?我看芯片资料,GAL16V8D的VIH是2V。…

查看全部问答>

[求助]急急急!!MSPF1232静态电流过大

工作到扫尾状态时,突发的想测下电流,吓了好大一跳!天啊!28mA 一直找不到原因.甚至将所有外围电路去掉,最后将片子悬空只保留电源,跑最简单的程序,也有8mA. 从程序配置到硬件连线,查了个遍,身边的人问了个遍,无解! 极度郁闷中! 附带:拿的5个样片 ...…

查看全部问答>

protues上仿真的频率计

有图有程序的简易频率计…

查看全部问答>