欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
51單片機紅外遙控控制步進電機的LCD顯示源程序
[打印本頁]
作者:
weishanghao
時間:
2020-6-5 12:51
標題:
51單片機紅外遙控控制步進電機的LCD顯示源程序
最近玩了51控制步進電機,利用51單片機紅外控制步進電機的LCD顯示(成功了),壓縮包內代碼全面,可直接套用,有興趣的話大家可以下載研究。
單片機源程序如下:
/*******************************************************************************
* 實驗名 : 紅外控制步進電機1602顯示值實驗
* 使用的IO : 電機用P2口
* 實驗效果 : LCD1602顯示出讀取到的紅外線的值,步進電機作出相應的動作,啟動、停止、正轉反轉等
* 注意 :
*******************************************************************************/
#include<reg51.h>
#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黑下載附件…………
復制代碼
所有程序51hei提供下載:
紅外控制·步進電機 LCD1602顯示.rar
(39.52 KB, 下載次數: 60)
2020-6-5 12:49 上傳
點擊文件名下載附件
10
下載積分: 黑幣 -5
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1