Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1972620
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类: C/C++

2012-12-09 21:05:22

程序功能:
遥控器按A、B、C、D四个按键,串口输出不同的信息
SC2272和单片机接口为D0、D1、D2、D3、VT和单片机P1.0-P1.5。
没有按遥控器时,5个输出口为低电平。
VT表示电平有效,例如:
按B键时,D0和VT输出均为高电平。()
程序如下:
#include "reg52.h"
#define DISTIME_DELAY 500000
#define LZ_WIRELESS_DEBUG 0
unsigned char in_buff;
char flag_send;
char timer0_count;
char code str[]=
{
"\r\n\
##########################################\r\n\
hardware is stc89c52\r\n\
software is keil c code\r\n\
SC2272-M4 TEST!\r\n\
write by:Mr Lee\r\n\
##########################################\r\n"
};
void uart_init()
{
   TMOD=0x20;     //TMOD=0
   TH1=0xf3;      //12MHZ   ,BPS:4800,N,8,1,0xf3=243
   TL1=0xf3;
   PCON=0x80;     //方式一,8位数据位,一位起始位和一位结束位
   TR1=1;         //
   SCON=0x40;     //串口通信控制寄存器  模式一
}
void timer0_init(void)
{
  //TMOD=0x01;//选定时器0,工作方式1,16位计数模式
  TMOD|=0x01;
  TH0=(65535-DISTIME_DELAY)/255;//设置初始值
  TL0=(65535-DISTIME_DELAY)%255;

  EA=1;//打开总中断
  ET0=1;//打开定时器0中断
  TR0=1;//定时器零开始计数
}
void uart_putchar(unsigned char dat)
{
SBUF=dat; //把数据送给sbuf缓存器中
while(TI!=1);//发送标志位 TI如果发送了为1,没发送为0,没发送等待,到了退出循环
TI=0;  //到了,TI清为0

}
void uart_printf(unsigned char *buff)
{

while(*buff)
        uart_putchar(*buff++);
}
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i
{
for(j=0;j<121;j++)
{;}
}
}

void main()
{
uart_init();
timer0_init();
uart_printf(str);
while(1)
{
if((P1&0x10)==0x10)
{
in_buff=(P1&0x0f);
if(flag_send==1)
{
flag_send=0;
switch(in_buff)
{
case 1:{uart_printf("key B is pressed\r\n");}break;
case 2:{uart_printf("key D is pressed\r\n");}break;
case 4:{uart_printf("key A is pressed\r\n");}break;
case 8:{uart_printf("key C is pressed\r\n");}break;
default:
{
uart_printf("wireless is error!\r\n");
}break;
}
#if LZ_WIRELESS_DEBUG==1
uart_putchar(in_buff);
uart_printf("\r\n");
#endif
}
}
else
{
if(flag_send==1)
{
flag_send=0;
uart_printf("no key is pressed\r\n");
}
}
}

}
void timer0() interrupt 1
{
TH0=(65535-DISTIME_DELAY)/255;
        TL0=(65535-DISTIME_DELAY)%255;
timer0_count++;
if(timer0_count>=20)
{
timer0_count=0;
flag_send=1;
}
}
图片如下:
阅读(8821) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~