单片机来帮小弟我看个程序
发布时间:2010-06-14 16:01:10 文章来源:www.iduyao.cn 采编人员:星星草
单片机高手进来帮我看个程序
#include <reg52.h>
#define uchar unsigned char
uchar code tabledu[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0xFF,0x39,0xBF,0x79,0x71};
uchar code tablewe[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07};
uchar irtime;
uchar disp[8];
uchar irdata[33];
uchar ircode[4];
uchar start_flag;
uchar bitnum;
uchar irrecvok;
uchar irprosok;
uchar flag; //接收与发送标志
void time01init();
void int1init();
void chuankouinit();
void irpros();
void irwork();
void display();
void delay();
void jieshou();
void fasong();
void main()
{
time01init();
int1init();
chuankouinit();
while(1)
{
jieshou();
display();
fasong();
}
}
void time01init()
{
TMOD=0x22;
TH1=0xFD;
TL1=0xFD;
TH0=0;
TL0=0;
TR1=1;
TR0=1;
ET1=1;
ET0=1;
EA=1;
}
void int1init()
{
IT1=1;
EX1=1;
EA=1;
}
void chuankouinit()
{
SM0=0;
SM1=1;
REN=1;
ES=1;
EA=1;
}
void time0() interrupt 1
{
irtime++;
}
void int1() interrupt 2
{
if(start_flag)
{
if(irtime>32)
{
irdata[0]=irtime;
irtime=0;
bitnum=1;
}
else
{
irdata[bitnum]=irtime;
irtime=0;
bitnum++;
if(bitnum==33)
{
bitnum=0;
start_flag=0;
irrecvok=1;
}
}
}
else
{
irtime=0;
start_flag=1;
}
}
void irpros()
{
uchar i,j,k;
uchar value;
k=1;
for(j=0;j<4;j++)
{
for(i=0;i<8;i++)
{
value>>=1;
if(irdata[k]>6)
{
value|=0x80;
}
k++;
}
ircode[j]=value;
}
irprosok=1;
}
void irwork()
{
disp[0]=ircode[0]/16;
disp[1]=ircode[0]%16;
disp[2]=ircode[1]/16;
disp[3]=ircode[1]%16;
disp[4]=ircode[2]/16;
disp[5]=ircode[2]%16;
disp[6]=ircode[3]/16;
disp[7]=ircode[3]%16;
}
void delay()
{
uchar a=50;
while(a--);
}
void display()
{
uchar i;
for(i=0;i<8;i++)
{
P1=tablewe[i];
P2=tabledu[disp[i]];
delay();
P2=0x00;
}
}
void jieshou()
{
if(irrecvok)
{
irrecvok=0;
irpros();
flag=1;
}
if(irprosok)
{
irprosok=0;
irwork();
}
}
void fasong()
{
if(flag)
{
flag=0;
SBUF=ircode[0];
while(!TI);
TI=0;
SBUF=ircode[1];
while(!TI);
TI=0;
SBUF=ircode[2];
while(!TI);
TI=0;
SBUF=ircode[3];
while(!TI);
TI=0;
}
}
这是一个红外接收程序,再用串口把编码传输回电脑,运行后单片机数码管不显示,也不能接收编码,求达人指点
------解决方案--------------------
1.任务应该有返回值:成功与失败。
2.任务应该有执行条件,满足条件才能执行。
3.有些任务具有互斥性,不能并行执行,否则可能堆栈溢出,死机。
一点浅见:接收的时候关闭串口,开串口的时候关闭接收。
再有:养成良好的变成习惯,流程图要做。
关闭发送,
停止刷新显示,
准白接收,
如果有合法数据 -》 关闭接收,刷新显示。-》启动发送-》准备下次接收。
如果数据非法,关闭接收,刷新显示,-》准备下次接收。
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
c51串口求助!
串口接收程序如下
void rec_gps(void) interrupt 4 {
uchar str;
uint i,k;
k=0;
i=0;...
-
win7运行CodeWarrior IDE出错
我的本安装了CodeWarrior IDE,一运行就会出现提示:
IDE 4.1 Build 0622 已停止工作。
或者提示:
Unha...
-
关于AT指令控制GSM短信猫的问题
C/C++ code
打开串口
BOOL CComm::OpenComm(const char* pPort,
int nBaudRa...
-
关于51中断求教
各位大虾,我现在要做一个GPS授时的小程序,遇到如下困惑,求大虾们解答:
1 线路板上带有时钟芯片,平时显示时间是...
-
atd指令拨号,如何判断电话状态
在网上找了许久,终于找到一位仁心解决方案,这个指令是可以得到手机当时的状态,但是不管是空号、欠费、...
-
知道在哪跑飞,跑飞的详细原因有谁能解释一下。
今天出现这样的问题:
将这个中断函数注释掉:
#pragma vector=USCI_B2_VECTOR
__in...
-
51程序移植到2051
大牛们,我想吧一个51的程序移植到2051中,用NXP的89V51芯片时用到的I/O口只有P1.0 P1.1 P1.2 3三个,我现在移植到AT...
-
一道课程设计题:基于单片机的波形发生器的设计
设计要求:
1.能产生正弦波、方波、三角波、锯齿波等4种周期性波形,并且可通过调节变...
-
解析单片机最小系统及相关电路
原文出自:电子发烧友论坛——单片机论坛[color=#FF0000][/color]
单片机最小系统单片机最小系统介...
-
单片机学习书籍大全推荐
在电子发烧友论坛里看到了单片机学习资料汇总,特地搜罗了过来,不知道大家看过几本,也希望让需要学习的人 都...