- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
红外接收8smg显示程序
/*紅外接收8smg顯示程序*/
#includereg52.h
#define uchar unsigned char
#define uint unsigned int
sbit dula=P2^6;
sbit wela=P2^7;
uchar code tabledu[]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uchar code tablewe[]={
0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
uchar irtime;//定時器0計數
uchar startflag;//有效數據開始接收位
uchar bitnum;//數據第幾位
uchar irreceok;//接收完成標誌位
uchar irprosok; //處理接收數據結束標誌
uchar irdata[33];//包含引導碼共33位
uchar ircode[4]; //用於存放4個字節
uchar fjdisp[8]; //smg顯示分解數組
/*void delay_50us(uint t) //12M晶振
{
uchar j;
for(;t0;t--)
for(j=19;j0;j--);
}*/
void delay_50ms(uint t) //12M晶振
{
uchar j;
for(;t0;t--)
for(j=6245;j0;j--);
}
void init_time0(void) //定時器0初始化函數
{
TMOD=0x02;
TH0=0;
TL0=0;
ET0=1;
EA=1;
TR0=1;
}
void init_int0(void) //外部中斷0初始化函數
{
IT0=1;
EX0=1;
EA=1;
}
void irpros(void) //將接收數據分解為4個字節
{
uchar k,i,j,value;
k=1; //去除33位數據中的第一位(引導碼位)
for(j=0;j4;j++)
{
for(i=0;i8;i++)
{
value=1;
if(irdata[k]6)
/*1.125/0.256=4.4個irtime收到的數據為0,
2.25/0.256=8.8個irtime收到數據為1*/
value|=0x80;
k++;
}
//將32位數據分4次裝入ircode[]
ircode[j]=value;
}
irprosok=1;//32位數據處理完成標誌位
}
void irwork(void)//smg顯示分解函數
{
fjdisp[0]=ircode[0]/16;
fjdisp[1]=ircode[0]%16;
fjdisp[2]=ircode[1]/16;
fjdisp[3]=ircode[1]%16;
fjdisp[4]=ircode[2]/16;
fjdisp[5]=ircode[2]%16;
fjdisp[6]=ircode[3]/16;
fjdisp[7]=ircode[3]%16;
}
void display(void)
{
uchar i;
for(i=0;i8;i++)
{
P1=tabledu[fjdisp[i]];
P2=tablewe[i]; //8個smg動態顯示
delay_50ms(20);
}
}
void main()
{
init_time0();
init_int0();
while(1)
{
if(irreceok)//判斷33位數據是否接收完成
{
irpros(); //處理接收數據(分成4個字節)
irreceok=0;//清0後才能接收後面數據
}
if(irprosok)//判斷32位數據是否處理OK
{
irprosok=0;//清0才能處理後面數據
irwork(); //smg分解顯示
}
display();//smg顯示,display()必須在if外面
}
}
void time0() interrupt 1
{
//TH0=0;
//TL0=0;
irtime++;
}
void int0() interrupt 0
{
if(startflag)
//因startflag為0,第一個外部中斷不會進入if語句
{
if(irtime32) //檢測引導碼
//(4.5+4.5ms)/0.256約等於33個irtime
{
bitnum
原创力文档


文档评论(0)