这是我做的红外遥控控制的1602显示转速和转向的步进电机c语言原程序,已经调试成功!有些模块是以前做其他实验时做的,现在是直接调用的,包括1602液晶显示技术,TC9012红外解码,然后就是四相步进电机的控制程序了,我是把这些东西结合起来。对这个东西有兴趣的或者要做毕业设计的可以看看啊,不懂的请上单片机论坛http://www.51hei.com/bbs/ 公开讨论,我会给大家做出详细的解答。

#include

#include#include#define uchar unsigned char

#define uint unsigned int

static unsigned int count; //计数

unsigned int hour,minute,second,count;

sbit RS = P2^3;//Pin4

sbit RW = P2^2; //Pin5

sbit E = P2^4;//Pin6

#define Data P0 //数据端口

static int step_index; //步进索引数,值为0-7

bit k=0; //红外解码判断标志位,为0则为有效信号,为1则为无效

uchar n=0; //用来控制外部中断

static bit turn; //步进电机转动方向

static bit stop_flag; //步进电机停止标志

static int speedlevel; //步进电机转速参数,数值越大速度越慢,最小值为1,速度最快

static int spcount; //步进电机转速参数计数

void delay(unsigned int endcount); //延时函数,延时为endcount*0.5毫秒

void gorun(); //步进电机控制步进函数

uchar data date[4]; //date数组为存放地址原码,反码,数据原码,反码

char data Test1[]=" ";

#define IR_RE P3_2

void DelayUs(unsigned char us)//delay us

{

unsigned char uscnt;

uscnt=us>>1;/* Crystal frequency in 12MHz*/

while(--uscnt);

}

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

void DelayMs(unsigned char ms)//delay Ms

{

while(--ms)

{

DelayUs(250);

DelayUs(250);

DelayUs(250);

DelayUs(250);

}

}

void WriteCommand(unsigned char c)

{

DelayMs(5);//short delay before operation

E=0;

RS=0;

RW=0;

_nop_();

E=1;

Data=c;

E=0;

}

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

void WriteData(unsigned char c)

{

DelayMs(5); //short delay before operation

E=0;

RS=1;

RW=0;

_nop_();

E=1;

Data=c;

E=0;

RS=0;

}

/***********http://www.51hei.com单片机原创作品******************/

void ShowChar(unsigned char pos,unsigned char c)

{

unsigned char p;

if (pos>=0x10)

p=pos+0xb0; //是第二行则命令代码高4位为0xc

else

p=pos+0x80; //是第二行则命令代码高4位为0x8

WriteCommand (p);//write command

WriteData (c); //write data

}

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

void ShowString (unsigned char line,char *ptr)

{

unsigned char l,i;

l=line<<4;

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

ShowChar (l++,*(ptr+i));//循环显示16个字符

}

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

void InitLcd()

{

DelayMs(15);

WriteCommand(0x38); //display mode

WriteCommand(0x38); //display mode

WriteCommand(0x38); //display mode

WriteCommand(0x06); //显示光标移动位置

WriteCommand(0x0c); //显示开及光标设置

WriteCommand(0x01); //显示清屏

}

/*--------------------------延时1ms程子程序-----------------------*/

delay1000()

{

uint i,j;

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

for(j=0;j<124;j++)

;

}

/*---------------------------延时882us子程序-----------------------*/

delay882()

{

uint i,j;

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

for(j=0;j<109;j++)

;

}

/*--------------------------延时2400ms程子程序-----------------------*/

delay2400()

{

uint i,j;

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

for(j=0;j<99;j++)

;

}

void IR_decode()

{

uchar i,j;

while(IR_RE==0);

delay2400();

if(IR_RE==1) //延时2.4ms后如果是高电平则是新码

{

delay2400(); //延时4.8ms避开4.5ms的高电平

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

{

for(j=0;j<8;j++)

{

while(IR_RE==0); //等待地址码第1位高电平到来

delay882(); //延时882ms判断此时引脚电平

///CY=IR_RE;

if(IR_RE==0)

{

date[i]>>=1;

date[i]=date[i]&0x7f;

}

else if(IR_RE==1)

{

delay1000();

date[i]>>=1;

date[i]=date[i]|0x80;

}

} //1位数据接收结束

} //32位二进制码接收结束

}

if (date[2]==0x16)

TR0 = 0;

else if(date[2]==0x14)

{TR0 = 1;

}

else if(date[2]==0x10)

{if (speedlevel>1)

speedlevel--;

else

speedlevel=1;

}

else if(date[2]==0x1A)

{if(speedlevel<5)

speedlevel++;

else

speedlevel=5;

}

else if(date[2]==0x11)

turn=~turn;

[page]

}

void int0() interrupt 0 using 1

{

uint i;

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

{

delay1000();

if(IR_RE==1){k=~k;} //刚开始为4.5ms的引导码,如果4ms内出现高电平则退出解码程序

}

if(k==0)

{

EX0=0; //检测到有效信号关中断,防止干扰

IR_decode(); //如果接收到的是有效信号,则调用解码程序

//解码成功,调用显示程序,显示该键值

}

EX0=1; //开外部中断,允许新的遥控按键

}

void main(void)

{

InitLcd();//

DelayMs(15);

sprintf(Test1,"STEP MOTOR SPEED");//the first line

ShowString(0,Test1);

ShowChar(0x19,\'r\');

ShowChar(0x1a,\'p\');

ShowChar(0x1b,\'m\');

count = 0;

step_index = 0;

spcount = 0;

stop_flag = 0;

P1_0 = 0;

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

SP=0x60;

EA = 1; //允许CPU中断

TMOD = 0x11; //设定时器0和1为16位模式1

ET0 = 1; //定时器0中断允许

EX0=1;

TH0 = 0xFE;

TL0 = 0x0C; //设定时每隔0.5ms中断一次

TR0 = 1; //开始计数

turn=0;

speedlevel=1;

while(1)

{

if(turn==0)

ShowChar(0x14,\'+\');

else

ShowChar(0x14,\'-\');

if(TR0 ==0)

{

ShowChar(0x15,\'0\');

ShowChar(0x16,\'0\');

ShowChar(0x17,\'0\');

ShowChar(0x18,\'0\');

}

else

{

if(speedlevel==1)

{

ShowChar(0x15,\'3\');

ShowChar(0x16,\'0\');

ShowChar(0x17,\'0\');

ShowChar(0x18,\'0\');

}

else if(speedlevel==2)

{

ShowChar(0x15,\'1\');

ShowChar(0x16,\'5\');

ShowChar(0x17,\'0\');

ShowChar(0x18,\'0\');

}

else if(speedlevel==3)

{

ShowChar(0x15,\'1\');

ShowChar(0x16,\'0\');

ShowChar(0x17,\'0\');

ShowChar(0x18,\'0\');

}

else if(speedlevel==4)

{

ShowChar(0x15,\'0\');

ShowChar(0x16,\'7\');

ShowChar(0x17,\'5\');

ShowChar(0x18,\'0\');

}

else if(speedlevel==5)

{

ShowChar(0x15,\'0\');

ShowChar(0x16,\'6\');

ShowChar(0x17,\'0\');

ShowChar(0x18,\'0\');

}

}

}

}

//定时器0中断处理

void timeint(void) interrupt 1 using 0

{

TH0=0xFE;

TL0=0x0C; //设定时每隔0.5ms中断一次

count++;

spcount--;

if(spcount<=0)

{

spcount = speedlevel;

gorun();

}

}

void delay(unsigned int endcount)

{

count=0;

do{}while(count}

void gorun()

{

if (stop_flag==1)

{

P1_0 = 0;

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

return;

}

switch(step_index)

{

case 0: //0

P1_0 = 1;

P1_1 = 0;

P1_2 = 0;

P1_3 = 0;

break;

case 1: //0、1

P1_0 = 1;

P1_1 = 1;

P1_2 = 0;

P1_3 = 0;

break;

case 2: //1

P1_0 = 0;

P1_1 = 1;

P1_2 = 0;

P1_3 = 0;

break;

case 3: //1、2

P1_0 = 0;

P1_1 = 1;

P1_2 = 1;

P1_3 = 0;

break;

case 4: //2

P1_0 = 0;

P1_1 = 0;

P1_2 = 1;

P1_3 = 0;

break;

case 5: //2、3

P1_0 = 0;

P1_1 = 0;

P1_2 = 1;

P1_3 = 1;

break;

case 6: //3

P1_0 = 0;

P1_1 = 0;

P1_2 = 0;

P1_3 = 1;

break;

case 7: //3、0

P1_0 = 1;

P1_1 = 0;

P1_2 = 0;

P1_3 = 1;

}

if (turn==0)

{

step_index++;

if (step_index>7)

step_index=0;

}

else

{

step_index--;

if (step_index<0)

step_index=7;

}

}

步进电机红外遥控C语言程序,单片机红外遥控+步进电机+1602液晶显示c语言源程序...相关推荐

  1. 电视摇控器c语言程序,单片机红外电视遥控器C51程序代码

    原标题:单片机红外电视遥控器C51程序代码 //************************************************************** //名称:代码() /*- ...

  2. 振动传感器的c语言程序,单片机红外对射传感器实验详解 附程序源码

    #include #define                            BUF_LENTH              128                            // ...

  3. 单片机发射红外c语言程序,单片机模拟红外发射源程序IR-send

    单片机模拟红外遥控器发射的C语言程序 //********************************************单片机红外发射**************************** ...

  4. C语言 int 转单精度浮点,单精度浮点数与十六进制转换 C语言程序 单片机也可用...

    单精度浮点数与十六进制转换 C语言程序 单片机也可用 #include float Hex_To_Decimal(unsigned char *Byte,int num)//十六进制到浮点数 { // ...

  5. DSB算法C语言程序,单片机中使用DSB温度传感器C语言程序.doc

    单片机中使用DSB温度传感器C语言程序 单片机中使用DS18B20温度传感器C语言程序(参考1) /************************************************** ...

  6. 可运行的C语言程序的拓展名,可运行的c语言程序的扩展名为什么?

    可运行的c语言程序的扩展名为".exe".c语言程序经过"编译程序"编译之后,生成一个后缀为".obj"的二进制文件:然后由"连接 ...

  7. c语言单片机红外报警设计,超级简单单片机红外感应开关DIY设计

    描述 说明: 强光直射和家用电器的红外遥控器的环境中会有干扰,使开关自动跳变,稳定性差.于是这次我重点改进了源程序,加入了强光下.红外遥控器环境下的防干扰算法,让这个红外感应开关非常稳定,不再受任何干 ...

  8. 单片机自动调光C语言,C51单片机控制40w调光电源C语言程序

    C51单片机控制40w调光电源C语言程序,12M晶振,500Hz 2ms,1000Hz 1ms,300Hz 3.3ms,330Hz 3ms .3ms为一个周期,30us中断一次,共可以有100次中断, ...

  9. 好听的歌曲单片机c语言程序,单片机C语言程序举例(三)

    原标题:单片机C语言程序举例(三) 14.音乐播放 //此程序在硬件上调试通过 //本程序的晶振采用11.0592M #include sbit speaker=P1^2; unsigned char ...

最新文章

  1. ActiveMQ消息中间件简明笔记(1)——理论知识点整理
  2. mysql延迟解决方案
  3. Python基本语法_函数_参数的多类型传值
  4. java中web应用中重定向与转发的区别
  5. WP评论系统更换小结(转)
  6. 随机数是骗人的,.Net、Java、C为我作证 - 杨中科 - 博客园
  7. 物业管理系统c语言,物业管理系统C语言程序实习.doc
  8. SQL Server 2019 安装教程
  9. 大厂都搞不定的安全难题,被这家初创公司破解了!
  10. 智课雅思词汇---二十三、动词性后缀-ate-fy-ish-ize
  11. OCR应用:OCR识图取字
  12. C语言输出菱形(C笔记)
  13. 翻译:软件测试的未来五个趋势
  14. 损失函数MSE和MAE的区别以及如何选择
  15. CAD直接打印,不出现打印对话框
  16. 微信小程序踩坑(2):开发工具更新后报“VM110:5 appJSON[tabBar][borderStyle] 字段需为 black 或 white”错误
  17. x是偶数的c语言表达式,【单选题】能表示x 为偶数的表达式是 A. x%2==0 B. x%2==1 C. x-. x%2!=0...
  18. win10在主题下桌面图标设置时提示windows无法访问指定设备、路径或文件问题的解决方法
  19. python多功能文本编辑器_多功能高效 批处理式 Python IDE Python 编辑器 新时代新理念...
  20. java泡泡堂分析_java泡泡堂 - WEB源码|JSP源码/Java|源代码 - 源码中国

热门文章

  1. java:数据结构(二)栈的应用(进制转换全收集)
  2. jmeter 测试websocket接口(一)
  3. php引擎文件php.ini优化参数
  4. Android攻城狮ListView
  5. 遍历页面上所有的textBox
  6. ListBox combobox的常用功能
  7. Leetcode 121 动态规划(原名字不通过审核)
  8. 哈佛研究人员开发基于折纸造型高精度微型手术机器人
  9. 新业态催生无人经济步入黄金发展期
  10. matlab与音频处理