51单片机 驱动步进电机 C语言 lcd,51单片机红外遥控控制步进电机的LCD显示源程序...

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

* 实验名                           : 红外控制步进电机1602显示值实验

* 使用的IO             : 电机用P2口

* 实验效果       : LCD1602显示出读取到的红外线的值,步进电机作出相应的动作,启动、停止、正转反转等

*        注意                                         :

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

#include

#include"lcd.h"

sbit EN=P2^2;

sbit DIR=P2^1;

sbit CLK=P2^0;

sbit  Speaker=P1^5;

sbit IRIN=P3^2;

typedef unsigned char u8;

typedef unsigned int u16;

u16 z=0,cyl;

unsigned char code CDIS1[13]={" Red Control "};

unsigned char code CDIS2[13]={" IR-CODE:--H "};

unsigned char IrValue[6];

unsigned char Time;

void IrInit();

void DelayMs(unsigned int );

void T0_init();

void T1_init();

void keyscan();

/*  void delay1s(void);

void delay1s(void)

{

unsigned char h,i,j,k;

for(h=5;h>0;h--)

for(i=4;i>0;i--)

for(j=116;j>0;j--)

for(k=214;k>0;k--);

}  */

void T0_init()

{

//对TMOD进行赋值,选择T0/T1

//TMOD 8位 低4位用于T0,高4位用于T1 : GATE  C/T(C计数器高位有效,T定时器低位有效)  M1M2(工作方式 : 00 01 10 11)

//或运算|防止其他位被影响

TMOD|=0x11;

//计算初值  1ms=1000us的初值 :2的16次方(65535)-1000+1 = 64536 = FC18H  (工具)

TH0=(65536-50)/256;

TL0=(65536-50)%256;

//定时器0使能

ET0=1;

//打开总中断

EA=1;

//TR0/TR1是T0/T1的运行控制位 TR0置1,T0开始工作,置1则停止工作

}

//中断函数

void Timer0() interrupt 1

{

TH0=(65536-50)/256;

TL0=(65536-50)%256;

CLK=~CLK ;

}

void T1_init()

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

//定时器0使能

ET1=1;

//打开总中断

EA=1;

//TR0/TR1是T0/T1的运行控制位 TR0置1,T0开始工作,置1则停止工作

}

//中断函数

void Timer1() interrupt 3

{

TH1=(65536-50000)/256;

TL1=(65536-50000)%256;

z++;

}

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

* 函数名         : main

* 函数功能                   : 主函数

* 输入           : 无

* 输出                  : 无

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

void main()

{

unsigned char i;

IrInit();

LcdInit();

LcdWriteCom(0x80);

EN=0;

DIR=0;

T0_init();

T1_init();

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

{

LcdWriteData(CDIS1[i]);

}

LcdWriteCom(0x80+0x40);

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

{

LcdWriteData(CDIS2[i]);

}

while(1)

{

IrValue[4]=IrValue[2]>>4;                          //高位

IrValue[5]=IrValue[2]&0x0f;                //低位

if(IrValue[4]>9)

{

LcdWriteCom(0xc0+0x09);                        //设置显示位置

LcdWriteData(0x37+IrValue[4]);        //将数值转换为该显示的ASCII码

}

else

{

LcdWriteCom(0xc0+0x09);

LcdWriteData(IrValue[4]+0x30);        //将数值转换为该显示的ASCII码

}

if(IrValue[5]>9)

{

LcdWriteCom(0xc0+0x0a);

LcdWriteData(IrValue[5]+0x37);                //将数值转换为该显示的ASCII码

}

else

{

LcdWriteCom(0xc0+0x0a);

LcdWriteData(IrValue[5]+0x30);                //将数值转换为该显示的ASCII码

}

keyscan();

}

}

void keyscan()

{

if( IrValue[4]==4&&        IrValue[5]==5) //步进启动

{

TR0=1;

EN=1;

}

else if( IrValue[4]==4&&        IrValue[5]==4) //停止

{

TR0=0;

EN=0;

}

else if( IrValue[4]==0&&        IrValue[5]==9) //正

{

DIR=1;

}

else if( IrValue[4]==1&&        IrValue[5]==5) //反

{

DIR=0;

}

}

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

* 函数名         : DelayMs()

* 函数功能                   : 延时

* 输入           : x

* 输出                  : 无

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

void DelayMs(unsigned int x)   //0.14ms误差 0us

{

unsigned char i;

while(x--)

{

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

{}

}

}

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

* 函数名         : IrInit()

* 函数功能                   : 初始化红外线接收

* 输入           : 无

* 输出                  : 无

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

void IrInit()

{

IT0=1;//下降沿触发

EX0=1;//打开中断0允许

EA=1;        //打开总中断

IRIN=1;//初始化端口

}

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

* 函数名         : ReadIr()

* 函数功能                   : 读取红外数值的中断函数

* 输入           : 无

* 输出                  : 无

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

void ReadIr() interrupt 0

{

unsigned char j,k;

unsigned int err;

Time=0;

DelayMs(70);

if(IRIN==0)                //确认是否真的接收到正确的信号

{

err=1000;                                //1000*10us=10ms,超过说明接收到错误的信号

/*当两个条件都为真是循环,如果有一个条件为假的时候跳出循环,免得程序出错的时

侯,程序死在这里*/

while((IRIN==0)&&(err>0))        //等待前面9ms的低电平过去

{

DelayMs(1);

err--;

}

if(IRIN==1)                        //如果正确等到9ms低电平

{

err=500;

while((IRIN==1)&&(err>0))                 //等待4.5ms的起始高电平过去

{

DelayMs(1);

err--;

}

for(k=0;k<4;k++)                //共有4组数据

{

for(j=0;j<8;j++)        //接收一组数据

{

err=60;

……………………

…………限于本文篇幅 余下代码请从51黑下载附件…………

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

邬贺铨:工业物联网的技术与前景

来源&#xff1a;走向智能论坛概要&#xff1a;工业物联网是企业信息化的进程&#xff0c;我们经历了流程电子化、管理数字化、生产自动化到企业互联网化和企业智能化。邬贺铨&#xff1a;工业物联网靠花钱是买不到的&#xff01;12月20日&#xff0c;2017第八届中国物联网产业…

约瑟夫问题C语言加注释,用链表实现约瑟夫环【有注释,有很多注释】

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼主要问题在于删除约瑟夫环的数,结果一直出不来,看了好几天改了好几次都改不对#include #include typedef struct ysf{int num;struct ysf*next;}YSF;YSF*creat(int aa[]){int i;YSF *headNULL,*p1NULL,*p2NULL;headp1p2(YSF*)mallo…

Windows平台下GO语言编译器(GO-windows)

go for windows下载:http://code.google.com/p/go-windows/ ,http://savechina.download.csdn.net/使用前需要dos执行set GOROOT<the go folder>set GOOSmingwset GOARCH386set PATH<the go folder>/bin编译执行test.go文件需要执行8g test.go //编译生成test.88l …

30亿美金投入!一文读懂英伟达性能凶残的Tesla V100牛在哪?

来源&#xff1a;智东西概要&#xff1a;AI已无处不在&#xff0c;两股力量正推动计算机领域的未来。GTC CHINA 2017大会上&#xff0c;英伟达创始人兼CEO黄仁勋表示&#xff0c;AI已无处不在&#xff0c;两股力量正推动计算机领域的未来。第一、摩尔定律已终结&#xff0c;设计…

WPF Border

在 WPF 中&#xff0c;Border 是一种常用的控件&#xff0c;用于给其他控件提供边框和背景效果。 要使用 Border 控件&#xff0c;您可以在 XAML 代码中添加以下代码&#xff1a; <Border BorderBrush"Black" BorderThickness"2" Background"Lig…

C语言的数组基础,C语言基础-数组

一、数组(一维数组)什么是数组&#xff1f;数组是一组有序的、类型相同的数据的集合数组的作用&#xff1f;处理一些类型相同的数据集合数组的构成&#xff1a;元素、下标或索引、数组名定义&#xff1a;使用前必须定义1、存储类型2、数据类型3、数组名4、数组大小语法&#xf…

Go语言,在Ubuntu9.10和Windows安装

工作环境&#xff1a;Ubuntu9.10A、安装C语言工具Go的工具链采用C语言编写&#xff0c;构建需要安装以下开发工具&#xff1a;GCC,C语言标准库,the parser generator Bison,make,awk, 和ed &#xff08;编辑器&#xff09;.对于 OS X 系统&#xff0c;以上工具是Xcode的一部分。…

世界类脑AI巨系统研究综述,论ET大脑是不是全球首个类脑架构AI

前言&#xff1a;2017年12月20日阿里云云栖大会提出ET大脑&#xff0c;并宣称为全球首个类脑架构AI&#xff0c;本文详细介绍了类脑AI系统的理论研究和发展现状&#xff0c;分析了ET大脑理论的沿袭与借鉴。并指出企业为提升影响里推动新概念新理论无可厚非&#xff0c;但涉及到…

n元n次方程求解c 语言,解n元一次方程

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼解N元一次方程从文件读入整数 N, 然后读入N*( N1)矩阵&#xff0c;得到解并输出到文件中。int main(){int ch;printf("\n");printf(" Gaussian Matrix Cal \n");printf("\n");printf("Choose:…

我为什么喜欢Go语言

来源&#xff1a;http://www.cnblogs.com/AllenDang/archive/2012/03/03/2378534.html 从2000年至今&#xff0c;也写了11年代码了&#xff0c;期间用过VB、Delphi、C#、C、Ruby、Python&#xff0c;一直在寻找一门符合自己心意和理念的语言。我很在意写代码时的手感和执行的效…

Netflix 官方技术博客:个性化分发与推荐,走在前列的 Netflix 是怎么做的?

来源&#xff1a;36氪概要&#xff1a;对于个性化分发与推荐&#xff0c;Netflix都是一个走在前面的公司。其首页的个性化推荐策略不断被后来者所模仿。对于个性化分发与推荐&#xff0c;Netflix都是一个走在前面的公司。其首页的个性化推荐策略不断被后来者所模仿。近日&#…

android主要文件的作用是什么,androidmanifest.xml文件的作用是什么

androidmanifest.xml文件的作用&#xff1a;1、是每个android程序中必须的文件&#xff0c;它位于整个项目的根目录&#xff1b;2、配置程序运行所必要的组件&#xff0c;权限&#xff0c;以及一些相关信息&#xff1b;3、是整个应用的入口&#xff0c;所以有助于更加深入的理解…

盘点丨2017年亚洲新晋18家独角兽公司

来源&#xff1a;网易科技概要&#xff1a;在投资领域&#xff0c;当一个创业公司估值达到10亿美元时&#xff0c;人们就称它加入了独角兽俱乐部。在投资领域&#xff0c;当一个创业公司估值达到10亿美元时&#xff0c;人们就称它加入了独角兽俱乐部。据国外媒体Tech in Asia报…

LiteIDE 编写Go的单元测试

第一步&#xff1a;新建一个 package "even" 第二步&#xff1a;编写代码 // even project even.go package evenfunc Even(i int)bool{return i%20 }func odd(i int)bool{return i%21 }第三步&#xff1a;在包 even 下新建测试文件 even_test.go第四步&#xff1a;…

揭秘Facebook SLAM技术,如何为人们生活增添奇幻的艺术色彩?

来源&#xff1a;将门创投概要&#xff1a;随着现代智能手机技术的发展&#xff0c;几乎所有的手机都配备了摄像头、陀螺仪和加速度传感器&#xff0c;硬件的进步帮助SLAM技术得到更广泛的传播和应用。 在过去的一年里&#xff0c;虚拟现实技术(Virtual Reality&#xff0c;简称…

android系统签名app自动更新,【Android 进阶】Apk 使用系统签名

刚入职的时候&#xff0c;固件中 app 需要在源码中编译&#xff0c;不是很理解&#xff0c;为什么不使用 IDE 编译&#xff0c;然后 copy 到 /system/app/*,咨询导师&#xff0c;得到反馈 app 需要使用系统的权限 在 AndroidManifest.xml 中声明了系统全下申明了系统权限androi…

数独游戏破解

游戏规则&#xff1a; 1、每行都是 1~9 2、没列都是 1~9 3、每块都是 1~9 解答思路&#xff1a; 从坐标 [0][0] 开始&#xff0c;算出其允许填入的数字集合&#xff08;每行允许数字集合、每列允许数字集合 和 每块允许数字集合 的交集&#xff09;。 从左到右&#xff0c…

人工智能能否在对抗虚假新闻战争中完胜?

来源&#xff1a;亿欧概要&#xff1a;2017年&#xff0c;误导性和恶意的虚假在线内容是如此丰富多产&#xff0c;以至于人类无法让自己解脱困境。反而&#xff0c;这越发看来机器将不得不拯救我们。这可能是互联网历史上的第一个虚假新闻&#xff1a;1984年&#xff0c;有人在…

android gpu 视频编码,android – 编码器崩溃对Adreno GPU编码从Surface

我一直在努力解决这个问题超过一个星期&#xff0c;很可能是一个错误的Qualcomm GPU /硬件视频编码器。因为我们被迫发布应用程序&#xff0c;并且他们的开发人员论坛没有提供任何反馈&#xff0c;我也在这里发布它&#xff0c;希望有人能够提供一些线索&#xff0c;或更好&…

穷举法破解集合小游戏~

游戏网站&#xff1a;http://www.setgame.com/puzzle/set.htm 游戏规则&#xff1a; 1、三种颜色&#xff08;红、绿、紫&#xff09; 2、三种外形&#xff08;方形、椭圆形、花形&#xff09; 3、三种背景阴影&#xff08;实心、点、轮廓&#xff09; 4、三种个数&#x…