C51单片机原理及应用C51编程编程ERR141

51单片机红外遥控控制数码管显键值没效果 - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
51单片机红外遥控控制数码管显键值没效果
<div class=""
//大家帮我看看问题出在哪里,红外遥控发射的值要用怎么测
#include&reg51.h&
sbit IRIN=P3^2;
sbit led1 = P2^0;
sbit led2 = P2^1;
unsigned char IrValue[6];
unsigned char T
void IrInit();
void DelayMs(unsigned int );
code unsigned char Tab[17] =
& & & & {//定义数码管字型数据
& & & & & & & & 0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,& & & & //
& & & & & & & & 0x77,0x7C,0x39,0x5E,0x79,0x71,& & & & //AbCdEF
& & & & & & & & 0x40& & & & //-
& & & & };
/*******************************************************************************
* 函数名& && && &: main
* 函数功能& & & & & & & && & : 主函数
* 输入& && && &&&: 无
* 输出& && && && & & &&&: 无
*******************************************************************************/
void main()
& & & & IrInit();
& & & & while(1)
& & & & switch(IrValue[2])
& & & & & & & & case 0: P0 = Tab[0];
& & & & & & & & case 1: P0 = Tab[1];
& & & & & & & & case 2: P0 = Tab[2];
& & & & & & & & case 3: P0 = Tab[3];
& & & & & & & & case 4: P0 = Tab[4];
& & & & & & & & case 5: P0 = Tab[5];
& & & & & & & & case 6: P0 = Tab[6];
& & & & & & & & case 7: P0 = Tab[7];
& & & & & & & & case 8: P0 = Tab[8];
& & & & & & & & case 9: P0 = Tab[9];
}& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&&
/*******************************************************************************
* 函数名& && && &: DelayMs()
* 函数功能& & & & & & & && & : 延时
* 输入& && && &&&: x
* 输出& && && && & & &&&: 无
*******************************************************************************/
void DelayMs(unsigned int x)& &//0.14ms误差 0us
&&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;
& & & & 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;& & & & & & & &
& & & & & & & & & & & & & & & & & & & & while((IRIN==0)&&(err&0))//等待信号前面的560us低电平过去
//& & & & & & & & & & & & & & & & & & & & while (!IRIN)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & DelayMs(1);
& & & & & & & & & & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & err=500;
& & & & & & & & & & & & & & & & & & & & while((IRIN==1)&&(err&0))& & & &&&//计算高电平的时间长度。
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & DelayMs(1);//0.14ms
& & & & & & & & & & & & & & & & & & & & & & & & Time++;
& & & & & & & & & & & & & & & & & & & & & & & & err--;
& & & & & & & & & & & & & & & & & & & & & & & & if(Time&30)
& & & & & & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & & & & & EX0=1;
& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & IrValue[k]&&=1;& & & &&&//k表示第几组数据
& & & & & & & & & & & & & & & & & & & & if(Time&=8)& & & & & & & & & & & & //如果高电平出现大于565us,那么是1
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & IrValue[k]|=0x80;
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & Time=0;& & & & & & & & //用完时间要重新赋值& & & & & & & & & & & & & & & & & & & & & & & & & & & &
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & }
& & & & & & & & if(IrValue[2]!=~IrValue[3])
& & & & & & & & {
& & & & & & & & & & & &
& & & & & & & & }
& & & & }& & & & & & & & & & & &
11:17:32  
该类别下有 43 个回答。
该类别下有 35 个回答。
该类别下有 27 个回答。
该类别下有 24 个回答。
该类别下有 23 个回答,其中被选为最佳答案 1 次。
该类别下有 23 个回答。
该类别下有 21 个回答。
该类别下有 21 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 19 个回答。
该类别下有 18 个回答。
该类别下有 18 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 17 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
该类别下有 16 个回答。
实物还是仿真,实物需要红外接收芯片,你板子上有没有
实物还是仿真,实物需要红外接收芯片,你板子上有没有
有的,程序下载进去开始时显示“0”,后面按遥控只显示8或者9
解决了,把switch里面换成
& & & & & & & & case 0X0C: P0 = Tab[1];
& & & & & & & & case 0X18: P0 = Tab[2];
& & & & & & & & case 0X5E: P0 = Tab[3];
& & & & & & & & case 0X08: P0 = Tab[4];
& & & & & & & & case 0X1C: P0 = Tab[5];
& & & & & & & & case 0X5A: P0 = Tab[6];
& & & & & & & & case 0X42: P0 = Tab[7];
& & & & & & & & case 0X52: P0 = Tab[8];
& & & & & & & & case 0X4A: P0 = Tab[9];
就可以了,但是为什么是这些值呢??
解决了,把switch里面换成
& & & & & & & & case 0X0C: P0 = Tab[1];
& & & & & & & & case 0X18: P0 = Tab[2];
因为每个按键的值都是固定好的,你可以通过串口检测程序来检测你的遥控器上每个按键对应的键码值
有的,程序下载进去开始时显示“0”,后面按遥控只显示8或者9
请问0 的代码是什么
按键的键值和你的硬件接线有关系,0号按键的键值不是等于0的
解决了,把switch里面换成
& & & & & & & & case 0X0C: P0 = Tab[1];
& & & & & & & & case 0X18: P0 = Tab[2];
那些值是遥控器上每个键解码后的值,每个码都对应遥控器上的一个键
初学单片机,问一下这里为什么延迟10ms
初学单片机,问一下这里为什么延迟10ms
可能是前面的引导码的时间
遥控按键出来接吗,就是ASCII码
正需要此资料,感谢楼主无私分享,先学习,后评论
正需要此资料,感谢楼主无私分享
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
Powered by
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司C51单片机编程ERR141_百度知道
C51单片机编程ERR141
#include&reg52.h&#defineledP0typedefunsignedcharu8;typedefunsignedintu16;voiddelay(u16i){while(i--);}voidmain(){u8i;led=0x01;delay(50000);while(1){for(i=0;i&7;i++){led=(0...
#include&reg52.h&#define led P0 typedef unsigned char u8;
typedef unsigned int u16;void delay(u16 i){while(i--);}void main(){u8led=0x01;delay(50000);while(1){for(i=0;i&7;i++){led=(0x01&&i);delay(50000)}}}
&#xe6b9;答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
lycdl知道合伙人
来自电脑网络类芝麻团
采纳数:8773
获赞数:12272
参与团队:
最后那个调延时子程序,就这么一行:delay(50000) ,结尾没有分号吗,加个分号就行了。这劲费的?
为你推荐:
其他类似问题
您可能关注的内容
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。您所在位置: &
&nbsp&&nbsp&nbsp&&nbsp
单片机原理及接口技术答案.doc 41页
本文档一共被下载:
次 ,您可全文免费在线阅读后下载本文档。
&#xe600;下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
你可能关注的文档:
··········
··········
1-1.除了单片机这一名称外,单片机还可称为( 微控制器)和( 嵌入式控制器)。参P1
1-2.单片机与普通微型计算机的不同之处在于其将( CPU)、(存储器)和(I/O口)三部分,通过内部(总线)连接在一起,集成于一块芯片上。参P1
1-3.的区别是(C)。参P6A. 内部数据存储单元数目不同B. 内部数据存储器的类型不同
C. 内部程序存储器的类型不同
D. 内部寄存器的数目不同
1-4.在家用电器中使用单片机应属于微计算机的( B)。参P3
A. 辅助设计应用B. 测量、控制应用C. 数值计算应用D. 数据处理应用
1-5.微处理器、微计算机、微处理机、CPU、单片机、之间有何区别?参P1、参P12
答:微处理器、微处理机和CPU它们都是中央处理器的不同称谓,微处理器芯片本身不是计算机。而微计算机、单片机它们都是一个完整的计算机系统,单片机是集成在一个芯片上的用于测控目的的单片微计算机。嵌入式处理器一般意义上讲,是指嵌入系统的单片机、DSP、嵌入式微处理器。目前多把嵌入式处理器多指嵌入式微处理器,例如ARM7、ARM9等。嵌入式微处理器相当于通用计算机中的CPU。与单片机相比,单片机本身(或稍加扩展)就是一个小的计算机系统,可独立运行,具有完整的功能。而嵌入式微处理器仅仅相当于单片机中的中央处理器。为了满足嵌入式应用的特殊要求,嵌入式微处理器虽然在功能上和标准微处理器基本是一样的,但在工作温度、抗电磁干扰、可靠性等方面一般都做了各种增强。
1-6.MCS-51系列单片机的基本型芯片分别为哪几种?它们的差别是什么?参P6答:MCS-51系列单片机的基本型芯片分别为:和8751。它们的差别是在片内程序存储器上。8031无片内程序存储器、8051片内有4K字节的程序存储器ROM,而8751片内有集成有4K字节的程序存储器EPROM。
1-7.为什么不应将51系列单片机称为MCS-51系列单片机?参P6答:因为MCS-51系列单片机中的“MCS”是Intel公司生产的单片机的系列符号,而51系列单片机是指世界各个厂家生产的所有与8051的内核结构、指令系统兼容的单片机。
1-8.AT89S51单片机相当于MCS-51系列单片机中哪一种型号的产品?参P7答:相当于MCS-51系列中的87C51,只不过是AT89S51芯片内的4K字节Flash存储器取代了87C51片内的4K字节的EPROM。
1-9.嵌入式处理器家族中的单片机、DSP、嵌入式微处理器各有何特点?它们的应用领域有何不同?参P12答:单片机体积小、价格低且易于掌握和普及,很容易嵌入到各种通用目的的系统中,实现各种方式的检测和控制。单片机在嵌入式处理器市场占有率最高,最大特点是价格低,体积小。 DSP是一种非常擅长于高速实现各种数字信号处理运算(如数字滤波、FFT、频谱分析等)的嵌入式处理器。由于对其硬件结构和指令进行了特殊设计,使其能够高速完成各种复杂的数字信号处理算法。广泛地用于通讯、网络通信、数字图像处理,电机控制系统,生物信息识别终端,实时语音压解系统等。这类智能化算法一般都是运算量较大,特别是向量运算、指针线性寻址等较多,而这些正是DSP的长处所在。与单片机相比,DSP具有的实现高速运算的硬件结构及指令和多总线,DSP处理的算法的复杂度和大的数据处理流量以及片内集成的多种功能部件更是单片机不可企及的。嵌入式微处理器的基础是通用计算机中的CPU,它的地址总线数目较多能扩展较大的存储器空间,所以可配置实时多任务操作系统(RTOS)。RTOS是嵌入式应用软件的基础和开发平台。正由于嵌入式微处理器能运行实时多任务操作系统,所以能够处理复杂的系统管理任务和处理工作。因此,广泛地应用在移动计算平台、媒体手机、工业控制和商业领域(例如,智能工控设备、ATM机等)、电子商务平台、信息家电(机顶盒、数字电视)以及军事上的应用。
1-10.什么是嵌入式系统?参P14答:广义上讲,凡是系统中嵌入了“嵌入式处理器”,如单片机、DSP、嵌入式微处理器,都称其为“嵌入式系统”。但多数人把 “嵌入”嵌入式微处理器的系统,称为“嵌入式系统”。 目前“嵌入式系统”还没有一个严格和权威的定义。目前人们所说的“嵌入式系统”,多指后者。
2-1.AT89S51单片机的片内都集成了哪些功能部件?参P16答:AT89S51单片机的片内都集成了如下功能部件:(1)1个微处理器(CPU);(2)128个数据存储器(RAM)单元 ;(3)4K Flash程序存储器;(4)4个8位可编程并行I/O口(P0口、P1口、P2口、P3口);(5)1个全双工串行口;(6)2个16位定时器/计数器;(7)1个看门狗定时器;(8)一个中断系统,5个中断源,2个优先
正在加载中,请稍后...

我要回帖

更多关于 单片机 C51编程音乐 的文章

 

随机推荐