完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
单片机用的是STC12C5A60S2,晶振11.0592MHz。 进入掉电模式的流程图: 故障表现:进入wile循环后,已经进入掉电模式后,液晶屏会不定时自动的出现输出的字符"D",或1分钟,或5分钟,或10分钟(根据代码会出现字符“D”是表示外部中断唤醒,进入失败?)。红外遥控器按一次只会输出一个“D”,无法完成整个解码过程,连续按2次解码正常。请问这是什么问题(下面有完整的电路图,源代码)?谢谢! 电路图:点击可放大 ---- C源代码: /*STC12C5A60S2 11.0592MHz*/ #include #include #define uchar unsigned char #define uint unsigned int ***it rs=P3^6; //1602数据/命令 ***it e=P3^7; //1602使能控制 ***it dyled=P0^0; //电源指示灯及用作测试 ***it j=P2^0; //继电器 ***it IR_INPUT = P3^3; //1838红外接收引脚 bit irflag = 0; //红外接收标志,收到一帧正确数据后置1 unsigned char ircode[4]; //红外代码接收 unsigned char disp[11]; unsigned char code Tab[16]="0123456789ABCDEF"; void Initinfrared() { IR_INPUT = 1; TMOD &= 0X0F; TMOD |= 0x10; TR1 = 0; ET1 = 0; IT1 = 1; EX1 = 1; } unsigned int GetHighTime() { TH1 = 0; TL1 = 0; TR1 = 1; while(IR_INPUT) { if(TH1 > 0x40) { break; } } TR1 = 0; return(TH1 * 256 + TL1); } unsigned int GetLowTime() { TH1 = 0; TL1 = 0; TR1 = 1; while(!IR_INPUT) { if(TH1 > 0x40) { break; } } TR1 = 0; return(TH1 * 256 + TL1); } void EXINT1_ISR() interrupt 2 //TNT1中断 红外一体接收头 { unsigned char i, j; unsigned int time; unsigned char byt; time = GetLowTime(); if((time <7833) || (time > 8755)) { IE1 = 0; return; } time = GetHighTime(); if((time<3686) || (time > 4608)) { IE1 = 0; return; } dyled=0; //遥控器按下按键,掉电唤醒后,程序到这里终止(唤醒后的一瞬间无晶起振或是起振不及时导致?) for(i=0; i<4; i++) { for(j=0; j<8; j++) { time = GetLowTime(); if((time<313) ||(time >718)) { IE1 = 0; return; } time = GetHighTime(); if((time>313) && (time <718)) { byt >>= 1; } else if((time>1345) && (time<1751)) { byt >>= 1; byt |= 0x80; } else { IE1 = 0; return; } } ircode = byt; } irflag = 1; IE1 = 0; } void delay_50us(uint t) //延时 { uint j; for(;t>0;t--) for(j=6245;j>0;j--); } void write_com(uchar com) //液晶屏写指令 { e=0; rs=0; P1=com; delay_50us(10); e=1; delay_50us(20); e=0; } void write_data(uchar dat) //液晶屏写数据 { e=0; rs=1; P1=dat; delay_50us(10); e=1; delay_50us(20); e=0; } void init() //液晶屏初始化 { delay_50us(300); write_com(0x38); delay_50us(100); write_com(0x38); delay_50us(100); write_com(0x38); delay_50us(100); write_com(0x38); write_com(0x38); write_com(0x08); write_com(0x01); write_com(0x06); write_com(0x0c); } void main(void) { EA = 1; //开总中断 InitInfrared(); //初始化红外功能 init(); //液晶屏初始化 while (1) { if (irflag) //接收到红外数据时刷新显示 { irflag = 0; write_com(0x01); //清屏 delay_50us(10); write_com(0x80); //定位写出位置 disp[0]=Tab[ircode[0]/16]; //二进制到十六进制赋值给红外码数组 disp[1]=Tab[ircode[0]%16]; disp[2]='-'; disp[3]=Tab[ircode[1]/16]; disp[4]=Tab[ircode[1]%16]; disp[5]='-'; disp[6]=Tab[ircode[2]/16]; disp[7]=Tab[ircode[2]%16]; disp[8]='-'; disp[9]=Tab[ircode[3]/16]; disp[10]=Tab[ircode[3]%16]; write_data(disp[0]); //disp红外码数组,输出到1602液晶屏 delay_50us(5); write_data(disp[1]); delay_50us(5); write_data(disp[2]); delay_50us(5); write_data(disp[3]); delay_50us(5); write_data(disp[4]); delay_50us(5); write_data(disp[5]); delay_50us(5); write_data(disp[6]); delay_50us(5); write_data(disp[7]); delay_50us(5); write_data(disp[8]); delay_50us(5); write_data(disp[9]); delay_50us(5); write_data(disp[10]); delay_50us(5); write_com(0x80+0x40); delay_50us(5); write_data(disp[4]); delay_50us(5); if((disp[0] == '4') && (disp[4] == 'C') && (disp[6] == '1') && (disp[7] == '4')) { dyled=~dyled; j=~j; //继电器响应红外按键信号 } } dyled=1; PCON = 0X02; //掉电模式 _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); delay_50us(5); write_data(' '); delay_50us(5); write_data('D'); //已经进入掉电模式后,液晶屏会不定时出现输出的字符"D",或5秒 或7秒 或20秒(进入失败?) dyled=1; //delay_50us(50); } } ---- STC12C5A60S2官方的掉电模式代码: #include "reg51.h" #include "intrins.h" //External interrupt0 service routine void exint1() interrupt 2 //(location at 0013H) { } void main() { IT1 = 1; //set INT1 int type (1:Falling 0:Low level) EX1 = 1; //enable INT1 interrupt EA = 1; //open global interrupt switch while (1) { INT1 = 1; //ready read INT1 port while (!INT1); //check INT1 _nop_(); _nop_(); PCON = 0x02; //MCU power down _nop_(); _nop_(); P1++; } } |
|
相关推荐
1个回答
|
|
应该是程序问题
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-LCD显示图片编程示例之介绍mmap
238 浏览 0 评论
《DNESP32S3使用指南-IDF版_V1.6》第二章 常用的C语言知识点
629 浏览 0 评论
【RA-Eco-RA2E1-48PIN-V1.0开发板试用】(第三篇)ADC采集+PWM输出
552 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第四十五章 人脸识别实验
552 浏览 0 评论
1074 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11764 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 02:03 , Processed in 0.648338 second(s), Total 70, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号