找回密码
 注册会员
更新自动建库工具PCB Footprint Expert 2024.04 Pro / Library Expert 破解版

基于51单片机的遥控调光灯设计

[复制链接]
admin 发表于 2012-9-2 13:25:07 | 显示全部楼层 |阅读模式

本文包含原理图、PCB、源代码、封装库、中英文PDF等资源

您需要 登录 才可以下载或查看,没有账号?注册会员

×
我做的是一个四按键的红外发射 下面是程序 可是老是有错误 请给位高手帮忙哈 这是我的毕业设计




#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
bit irout;//红外管状态
sbit ir=P3^5;//红外发射管控制脚
uint count, m;
bit flag,keyflag;//红外发送标志,按键标志位
//uchar irsys[4]={0x1a,0xa1,0xdc,0x03};//26位系统码,最后一个字节只用2位
uchar ircode;
/**********************************************
延时1ms
***********************************************/
void delay1ms(uint t)//延时1ms,晶振12M
{
uint i,j;
for(i=0;i<t;i++)
for(j=0;j<120;j++);
}
/**********************************************
按键扫描
**********************************************/
void keywork(void)
{
void delay1ms(10);
unsigned char key;
unsigned char kbscan();
while(1)
{ key=kbscan(); //键盘扫描函数
delay1ms(10); //健消除抖动的延时函数

}
unsigned char kbscan();
{
unsigned char sccode,recode;
P0=0x0c; //发全"0"行扫描,列线输入
if((P0&0x0c)!=0x0c) //有键按下
{ delay10ms(); //延时去抖动
if((P0&0x0c)!=0x0c)
{ sccode =0x0e; //逐行扫描初值
while((sccode&0x04)!=0)/*不到最后一行循环*/
{
P0=sccode; //输出行扫描码
if((P0&0x0c)!=0x0c) //本行有键按下
{ sccode=(P0&0x0c)&0x03;
return((sccode)+(recode)); //返回特征码
}
else
sccode=(sccode<<1)|0x01; //行扫描码左移一位
}
}
}
return (0); //无键按下,返回0

}
/*******************************************
发射函数
*******************************************/
sendcode()
{
ET1=1;TR1=1;delay1ms(3);ET1=0;TR1=0;ir=0;
for(m=key;m>0;m--)
{
delay1ms(1);
ET1=1;TR1=1;delay1ms(3);ET1=O;TR1=0;ir=0;
}
delay1ms(10);
}
/*******************************************
定时器初始化
*******************************************/
void init_timer()
{
EA=1;
TMOD=0X20;//8位自动重载模式
ET1=1; TR1=1;
TH1=0Xf3;//定时26us,38K红外波,晶振12m
TL1=0Xf3;
}
/*******************************************
主函数
*******************************************/
main()
{
init_timer();
count=0;
flag=0;
irout=1;
while(1)
{
keywork();
if(keyflag)//若有新按键
{
delay1ms(10);
sendcode();//发送红外编码
delay1ms(500);
keyflag=0;//按键标志清零
}
}
}
/*******************************************
定时器中断
*******************************************/
void timer1(void) interrupt 3
{ count++;
if(flag==1)
{ irout=~irout;
}
else
{
irout=1;
}
ir=irout;
}
*滑块验证:
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

QQ|手机版|MCU资讯论坛 ( 京ICP备18035221号-2 )|网站地图

GMT+8, 2024-11-25 01:06 , Processed in 0.053766 second(s), 10 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表