PPM

 

              由于最近在使用AS6122这个芯片,所以,就写了一个小小的程序。程序如下呢。最近要做国赛的题目,所以比较累比较忙(更多的文章请到http://microac13xb.bokee.com/,让我们共同学习,求知若渴,虚心若愚!我要忙了)~~~~

;===================================================================

;Source program

/*---------------------------------------------
  
   Instruction:due to un-clear PPM but knowing
   delay(1)'s times(N) >= 8 data=1 or data=0;

----------------------------------------------*/

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int

sbit IRIN=P3^3;       //红外接收
uchar User=0,Dat=0;            //只做简单的数据显示
uchar User_Dat[4]={0,0,0,0};

/**********************************************************/
void delay(unsigned char x)    //x*0.14MS
{
 unsigned char i;
  while(x--)
 {
  for (i = 0; i<13; i ) {}
 }
}

/**********************************************************/

//寄存器初始化
void Reg_Init(void)
{
  IRIN=1;
 EA=1;  //开总中断
 IE1=1;  //下降沿触发
 EX1=1;  //外部中断1启动

}

//中断处理函数-红外接收
void Ir_In () interrupt 2 using 2
{
   uchar i=0,j=0;
   uchar N=0,t=0;
   EX1=0;  //close
   delay(15);
   if(IRIN==1)
   {
     EX1=1;
  return ;
   }
   while(!IRIN)   //跳过9ms前导低电平
   {
       delay(1);
   }
   for(i=4;i>0;i--)
   {
     while(IRIN)
     {
         delay(1);                               //跳过4.5ms高电平
     }
  while(!IRIN)
     {
         delay(1);                              //跳过4.5ms低电平
     }
  for(j=8;j>0;j--)                           //开始读数据
  {
     while(IRIN)                            //计算高脉冲的宽度
     {
          delay(1);
    N ;
    if(N>=30) //计数过长
    {
     EX1=1;
     return ;
    }
     }
    
     User_Dat[i]>>=1;                      //右移一位高位清零
     if(N>=8) User_Dat[i]|=0x80;    //高位置一
     N=0;
        }//end for j
   }     //end for i

   if( (User_Dat[0]!=~ User_Dat[1])|| (User_Dat[2]!=~ User_Dat[3]))
   {
     //数据出错
  EX1=1;
  return;
  
   }
   else
   {
     
  User=User_Dat[0];
  Dat=User_Dat[2];
     EX1=1;
  return;
   }

}

void main(void)
{
 Reg_Init();
    while(1)
 {
  P0=User;  //用户码
  P2=Dat;   //数据码
 }

}

 

### PPM图像文件格式 PPM(Portable Pixmap Format)是一种简单的位图图形文件格式,用于存储彩色图像。这种格式属于Netpbm家族的一部分,该系列还包括PBM(便携式位图)、PGM(便携式灰度图)。PPM支持三种不同的编码方式:ASCII纯文本模式、二进制字节流以及压缩后的版本[^2]。 对于`read_ppm`函数的要求,在`image.py`模块中实现此功能时应确保能够处理不同变体的PPM文件而不受具体格式的影响。当检测到实际像素数量与头部声明的数量不符时,程序应当终止运行并向用户提供相应的错误提示信息[^1]。 ```python def read_ppm(file_path): with open(file_path, 'rb') as f: content = f.read() if not (content.startswith(b'P3') or content.startswith(b'P6')): raise ValueError("Invalid file format") lines = iter(content.splitlines()) while True: line = next(lines).strip() if not line.startswith(b'#'): break width_height_depth = line.decode().split(' ') width, height, max_val = map(int, width_height_depth) expected_pixel_count = width * height actual_pixel_data_start_index = sum(len(line)+1 for line in itertools.takewhile(lambda l: b'\n' in l and not l.strip().startswith(b'#'), lines)) pixel_data = list(itertools.islice(lines, None)) if len(pixel_data)*len(pixel_data[0])//3 != expected_pixel_count: sys.exit(f"Error: Expected {expected_pixel_count} pixels but found different amount.") class PortablePixmap: def __init__(self, w, h, d, data): self.width = w self.height = h self.depth = d self.data = data ppm_image = PortablePixmap(width, height, max_val, pixel_data) return ppm_image ``` 关于Python包管理工具方面,并不存在名为`ppm`的标准Python包管理器。常见的Python依赖项管理和分发工具有pip、poetry、setuptools等。如果提到的是特定领域内的小型社区或者自定义开发环境中的内部命名约定,则需进一步确认具体的上下文背景[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值