OV7670 是 OV(OmniVision)公司生产的一颗 1/6 寸的 CMOS VGA 图像传感器。该传感器体积小、工作电压低,提供单片 VGA
摄像头和影像处理器的所有功能。通过 SCCB 总线控制,可以输出整帧、子采样、取窗口等方式的各种分辨率 8 位影像数据。该产品 VGA 图像最高达到 30
帧/秒。用户可以完全控制图像质量、数据格式和传输方式。所有图像处理功能过程包括伽玛曲线、白平衡度、色度等都可以通过 SCCB 接口编程。





 由于目前该摄像头模块笔者仍在调试中,所以具体下位机部分,将会在以后记载。


 笔者的上位机程序源代码 <https://github.com/jack13163/OV7670>
放在了github上,上面包含由项目文件,如只是需要程序,可以发邮箱给我。需要注意的是,上位机是和下位机通过串口进行通讯的,因此,针对不同的下位机,也就需要由不同的上位机。笔者的上位机仍有不完善的地方,大家如果需要参考,切记要根据自己的下位机进行修改,或者按照我接下来的方式,修改你的下位机程序进行测试,这里是以OV7670的彩条测试为例。

1.下位机(单片机,笔者使用的是STM32ZET6(核心板))

下面是单片机模拟生成彩条的程序段


//单片机生成彩条测试 void OV7670_CreatColor() { uint16_t i,j,k = 0; uint16_t color = 0;
//列缓存区 uint16_t buff[320]; while(1) { //数据开始(从上往下,从左往右) printf("data:\n");
for(i=0;i<240;i++) { printf("L");//列有效 for(j=0;j < 320;j++)//一列 { //生成彩条 9E
F7,8D EF ,9E 3F,83 1F,FF F0,43 D9,95 28,82 10 if(i < 30) { color = 0x9EF7;
}else if(i < 60) { color = 0x8DEF; }else if(i < 90) { color = 0x9E3F; }else
if(i < 120) { color = 0x831F; }else if(i < 150) { color = 0xFFF0; }else if(i <
180) { color = 0x43D9; }else if(i < 210) { color = 0x9528; }else { color =
0x8210; } buff[j] = color; } //准备好一列数据 for(k=0;k<320;k++) { printf("%04X",
buff[k]);//打印色条 } printf("\n"); } } }


 2.上位机(采用C#和VS2015开发)


上位机主要是接收下位机发送的数据,并将数据显示在PictureBox中,中间需要用到串口类的监听数据是否到达的事件

DataReceived。


/// <summary> /// 串口数据到达事件 /// </summary> /// <param name="sender"></param>
/// <param name="e"></param> private void Sp_DataReceived(object sender,
SerialDataReceivedEventArgs e) { string data; Color[] colors; //检测串口是否打开 if
(isOpen) { //可能会出现意想不到错误的代码区域 try { //检测是否开始发送数据 if
(sp.ReadLine().Equals("data:")) { start = true; } //开始读取数据 if (start) {
//绘制图像(一列一列地绘制) for (int Xcount = 0; Xcount < 240; Xcount++) { if (isOpen) {
//读一列 data = sp.ReadLine(); if (data.StartsWith("L"))//列有效 { colors =
RGBToBitmap(data.Substring(1)); } else { return; } } else { return; } for (int
Ycount = 0; Ycount < 320; Ycount++) { OvImage.SetPixel(Xcount, Ycount,
colors[Ycount]); } this.pbImage.Image = OvImage; } start = false;//接收数据结束 } }
catch (Exception ex) { return; } } }
其他部分的代码请参见github上的代码,如有错误,欢迎大家批评指正,附模拟彩条测试效果。