标题:
红外通信等51单片机c语言教程例程分享
[打印本页]
作者:
liuwwe
时间:
2018-7-21 11:13
标题:
红外通信等51单片机c语言教程例程分享
51单片机学习
0.png
(43.23 KB, 下载次数: 24)
下载附件
2018-7-21 16:41 上传
单片机源程序如下:
#include"reg52.h"
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
sbit PPM=P3^2; //也是外部中断0的io
typedef unsigned char u8;
typedef unsigned int u16;
u8 TIME;
u8 text[4];
u8 digdisplay[3];
u8 code smgduan[17]={
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0X76};
//0、1、2、3、4、5、6、7、8、9、A、b、C、d、E、F、H的显示码
void delay(u16 time){
while(time--);
}
void Display(){
u8 i;
for(i=0;i<3;i++){
switch(i){
case 0:LSA=0,LSB=0,LSC=0;break;
case 1:LSA=1,LSB=0,LSC=0;break;
case 2:LSA=0,LSB=1,LSC=0;break;
}
P0=digdisplay[i];
delay(100);
P0=0x00;
}
}
void Irinit0(){
IT0=1;//选择下降沿有效
EX0=1; //开外部中断0
EA=1; //开总中断
PPM=1; //初始化
}
void main(){
Irinit0();
while(1){
digdisplay[0]=smgduan[16];
digdisplay[1]=smgduan[text[2]%16];//低四位
digdisplay[2]=smgduan[text[2]/16];//高四位
Display();
}
}
void Ir_Read() interrupt 0
{
u16 i,j;
u8 err;
TIME=0;
delay(700);
if(PPM==0){
err=1000;
while(PPM==0&&err>0){
delay(1);
err--;
}
if(PPM==1){ // 如果等到9ms后的高电平,在等4.5ms高电平过去
err=500;
while(PPM==1&&err>0)
delay(1);
err--;
}
for(i=0;i<4;i++){ //需要接收四针数据,用户码,用户码,数据码,数据反码
for(j=0;j<8;j++){
err=60;
while(PPM==0&&err>0){ //等待每一个字节前的0.56ms过去
delay(1);
err--;
}
TIME=0;
err=100; //防止等待时间太长
while(PPM==1&&err>0){
delay(10);//0.1ms
TIME++;
err--;
if(TIME>30){
return;
}
}
text[i]>>=1;
if(TIME>=8){
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
c51复习.zip
(378.43 KB, 下载次数: 17)
2018-7-21 11:12 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1