单片机教程之51单片机红外摇控,并在LCD1602上显示

发布者:温馨阳光最新更新时间:2015-09-08 来源: eefocus关键字:单片机教程  51单片机  红外摇控  LCD1602 手机看文章 扫描二维码
随时随地手机看文章
#include

#include
typedef unsigned int uint;
typedef unsigned char uchar;

sbit LCD_RS=P2^0;
sbit LCD_RW=P2^1;
sbit LCD_EN=P2^2;


sbit IRINPUT=P3^2;

 

uchar code Display_LINE0[]={"VALUE FROM IR:  "};
uchar  Display_LINE1[]={"IR CODE:    H   "};
uchar IR_Input_Buffer[8];
uchar Display_Buffer[3]={0x00,0x00};//数码管显示缓冲






void _delay_us(uint x)
{
 uchar i;
 while(x--)
 for(i=0;i<13;i++);
}

void _delay_ms(unsigned int x)
{
 unsigned char i;
 while(x--)
 {
  for(i=0;i<120;i++);
 }
}

uchar LCD_Busy(void)//测忙
{
 uchar LCD_Status;//返回值变量
 LCD_RS=0;//读取状态
 LCD_RW=1;
 LCD_EN=1;
 _nop_();_nop_();_nop_();_nop_();
 LCD_Status=P0;
 LCD_EN=0;
 return LCD_Status;
}

void LCD_Write_Command(uchar cmd)//写指令
{
 while((LCD_Busy()&0x80)==0x80);//测忙
 LCD_RS=0;//
 LCD_RW=0;
 LCD_EN=0;
 P0=cmd;
 LCD_EN=1;
 _nop_();_nop_();
 LCD_EN=0;
 _nop_();_nop_();
}

void LCD_Write_Data(uchar dat)//写数据
{
 while((LCD_Busy()&0x80)==0x80);
 LCD_RS=1;
 LCD_RW=0;
 LCD_EN=0;
 P0=dat;
 LCD_EN=1;
 _nop_();_nop_();
 LCD_EN=0;
 _nop_();_nop_();
}

void Init_LCD(void)//液晶初始化
{
 _delay_ms(15);
 LCD_Write_Command(0x38);
 _delay_ms(5);
 LCD_Write_Command(0x06);
 _delay_ms(5);
 LCD_Write_Command(0x0c);
 _delay_ms(5);
 LCD_Write_Command(0x01);
 _delay_ms(5);
 
}

void LCD_POS(uchar pos)//字符显示位置
{
 LCD_Write_Command(0x80|pos);
}

void Show_String(uchar *str)//显示字符串
{
 while(*str!='')
 LCD_Write_Data(*str++);
}





void IR_INT0(void)
{
 EX0=1;
 IT0=1;
 EA=1;
}






void main(void)
{
 IR_INT0();
 IRINPUT=1;
 Init_LCD();

 while(1)
 
  LCD_POS(0);
  Show_String(Display_LINE0);
  LCD_POS(0x40);
  Show_String(Display_LINE1);
 }
}





void IR_Input_INT() interrupt 0 using 0
{
 uchar i,j,k,N=0;
 EX0=0;//INT0 off
 _delay_us(15);//delay 2ms
 for(i=0;i<14;i++)
 {
  if(IRINPUT)
  {
   EX0=1;
   return;
  }
 }
 while(!IRINPUT)
 _delay_us(1);
 for(j=0;j<4;j++)
 {
  for(k=0;k<8;k++)
  {
   while(IRINPUT)
   _delay_us(1);
   while(!IRINPUT)
   _delay_us(1);
   while(IRINPUT)
   {
    _delay_us(1);//delay 0.14ms
    N++;
    if(N>=30)
    {
     EX0=1;
     return;
    }
   }
  IR_Input_Buffer[j]=IR_Input_Buffer[j]>>1;
  if(N>=8)
   IR_Input_Buffer[j]=IR_Input_Buffer[j]|0x80;
  N=0;
  }
 }
 if(IR_Input_Buffer[2]!=~IR_Input_Buffer[3])
 {
  EX0=1;
  return;
 }
 Display_Buffer[0]=IR_Input_Buffer[2]&0x0f;
 Display_Buffer[1]=IR_Input_Buffer[2]>>4;
 
 if(Display_Buffer[0]>9)
  Display_Buffer[0]=Display_Buffer[0]+0x37;
 else                                        
  Display_Buffer[0]=Display_Buffer[0]+0x30;
 if(Display_Buffer[1]>9)
  Display_Buffer[1]=Display_Buffer[1]+0x37;
 else
  Display_Buffer[1]=Display_Buffer[1]+0x30;
 Display_LINE1[11]=Display_Buffer[0];//低4位显示在LCD1602的第11列*/
 Display_LINE1[10]=Display_Buffer[1];//高4位显示在LCD1602的第10列*/

 EX0=1;
}

关键字:单片机教程  51单片机  红外摇控  LCD1602 引用地址:单片机教程之51单片机红外摇控,并在LCD1602上显示

上一篇:基于51单片机的RS-485的多机通信
下一篇:矩阵键盘键值在数码管上进行显示

推荐阅读最新更新时间:2024-03-16 14:30

51单片机简单计时器
#include reg52.h #define uint8 unsigned char #define uint16 unsigned short int //数码管段码显示:0~f,不亮 uint8 code LED_Disp = {0xC0,0xF9,0xA4,0xB0, //这一组编码当中不包含小数点 0x99,0x92,0x82,0xF8, 0x80,0x90}; //十个分别显示 0 1 2 3 4 5 6 7 8 9 uint8 code LED_Disp1 = {0x40,0x79,0x24,0x30, //这一个数组的编码中包含小数点 0x19,
[单片机]
89c51单片机的简单运用1--数码管、流水灯
一.简单的点灯程序需要记住的 1.单片机控制开发板的二极管亮灭: 由单片机的P1口控制,注意开发板的原理图,分清楚到底是给低电平亮还是高电平亮,一般都给低电平亮。 控制灯分为总线法和位选法,总线法是用十六进制数控制P1口的高低电平,1为高,0为低,位选是选出P1口的任意一位操作。 流水灯是通过延时函数或定时器延时,依次控制不同的灯亮来完成流水灯 2.数码管的静态显示和动态扫描: Lab-MCS51开发板通过单片机的P^0~P^3口分别控制四个数码管的亮灭,每个数码管显示的内容由P0口控制, 控制线路图如上,通过P0使a,b,c,d,e,f,g,dp亮,显示不同的数字或符号。 动态扫描是减少数码管间亮
[单片机]
89c<font color='red'>51单片机</font>的简单运用1--数码管、流水灯
关于51单片机电子时钟精度的问题
前几天用STC89C52单片机制作了一个电子时钟,经过一段时间的实验,发现时间精度存在误差,一分钟慢4秒左右。 这可了不得,十分钟就要慢40秒,一天下来不得慢半96分钟!!! 这个单片机晶振频率为11.0592mhz,和大部分时钟的晶振频率相同,应该没有问题。 后天考虑到源代码: 在定时器中断函数里: void t0(void) interrupt 1 using 0 { tcount++; if(tcount==4000) {tcount=0; second++; if(second==60) {second=0; minute++; if(minute==60) {minute=0;
[单片机]
51单片机-串口&EEPROM
1.题目要求 作为本教程最后一个例程,我们也不打算写的太复杂,这次还是运用串口的知识,实现用串口往EEPROM写入数据,同时也能用串口读出EEPROM里的数据出来显示在电脑端的窗口上。根据前几讲的串口与液晶屏的代码理解,这一讲的例程也不难理解。 2.main.c测试代码 #include reg52.h #include function.h //详见第六章第8讲 #include uart.h //详见第十章第4讲 #include iic.h //详见第十二章第3讲 u8 uart_i=0; u8 pdata RXDBUF ; void COUNT_TIMES() { TMOD&=0xF0;
[单片机]
单片机LM75温度报警LCD1602显示实验
一个由lm75构成的温度报警器例程 LM75数字温度传感器报警测试程序 1、程序说明: 该例程演示了接在单片机端口上的数字温度传感器LM75测试实验。 并在1602液晶上显示当前温度。同时判断是否超过了温度上限和下限, 如果超过,液晶屏将有提示闪烁。 2、实验操作 1、将跳线插座J4的跳线帽调至1602端 2、将LCD1602液晶屏插入J3插座中,注液管脚方向。 3、通过调节电位器VR1可以改变显示的对比度。 单片机源程序如下: /************************************************ * 文件描述 : LM75数字温度传感器报警测试程序 * 程序文件 : main.
[单片机]
51单片机十进制整数与二进制整数转换汇编语言子程序
==================================== 【4位十进制整数转换为二进制整数子程序】 入口:十进制整数千位数RAM址存于R0,百位数、十位数、个位数RAM址依次加1; 返回值:转换所得二进制整数存于R3(高字节)R4(低字节)。 DtoB: MOV R2, #4 ;;R2←递减的循环次数初值 MOV A, @R0 MOV R4, A ;;R4←千位数 LP1 : MOV A, R4 ;;R3R4←(R3)(R4)*10 MOV B, #10 MUL AB MOV R4, A MOV B, #10 XCH A
[单片机]
单片机DS18B20温度检测LCD1602显示程序+电路PCB设计
制作出来的实物图如下: Altium Designer画的原理图和PCB图如下: 单片机源程序如下: /*********************************************** 该程序为温度测量 用到DS18B20、LCD1602 备注:程序的许多地方也是理解了他人的程序才写出来的如果有理解错误、书写错误的地方望大家留言指导 ********************************
[单片机]
<font color='red'>单片机</font>DS18B20温度检测<font color='red'>LCD1602</font>显示程序+电路PCB设计
基于C语言51单片机电子密码锁的设计与仿真
  0、引言   电子密码锁是现代生活中常用的加密工具。它克服了机械式密码锁密码量少、安全性能差的缺点,尤其是的智能电子密码锁;不仅具有电子密码锁的功能”还可引人智能化管理功能,从而使密码锁具有更离的安全性和可靠性。   电子密码锁通常使用ARM和单片机控制,单片机相对ARM实现较为简单,功能较为完善,因此使用单片机控制较多。用单片机控制的窖码锁常使用汇编语言编写程序,显示器多数用。而本文所介绍的电子密犸锁使用移植性及可读性强的高级语言C语言编写,便于修改和增减功能蚤同时采用显示清楚数码管,功率消耗小而且寿命长的 液晶显示器,显示更加直观,使用更加方便。从经济实用的角度出发,采用STC89C52单片机设计出一种具有密码设置、报
[单片机]
基于C语言<font color='red'>51单片机</font>电子密码锁的设计与仿真
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved