历史上的今天

今天是:2024年11月19日(星期二)

2019年11月19日 | 基于AVR的8色带位图采集串口(实验)

发布者:SparkCrafter 来源: 51hei关键字:AVR  8色  带位图  采集串口 手机看文章 扫描二维码
随时随地手机看文章

#include

#define uchar unsigned char 

#define uint unsigned int 

#define set_bit(a,b)  a|=(1<#define clr_bit(a,b)  a&=(1<#define get_bit(a,b)  a&(1<uchar TXEND;

uchar send_tab0_pc=0;//发送TAB0数据标志位

uchar send_tab1_pc=0;//发送tab1数据标志位 

uchar i,j;

uchar TAB0[128];

uchar TAB1[128];

unsigned long v;//一帧的数据量

#pragma interrupt_handler TX_end:14

void TX_end()

{

SREG=0X80;//开启全局中断

TXEND=0;//发送完毕标志

}

void USART_INT()//初始化串口

{

//UCSRA默认

UCSRB=0x48;//使能发送完毕中断,禁能数据寄存器空中断,使能发送模式,关闭接收,关闭接收中断

UCSRC=0x86;//禁止奇偶效验,数据位8,停止位1,工作在异步模式

UBRRH=0x00;//

UBRRL=51;//波特率9600,8MHZ,

SREG=0x80;//开启全局中断

}


void send_byte(uchar buffer)//向PC发送数据

{

   while(0==get_bit(UCSRA,5));//数据寄存器里的数据是不是为空如果是就写数据

  

    UDR=buffer;



while(TXEND);//是否发送完毕?

TXEND=1;//上一帧已经发送准备下一帧的发送

}

/*void ov7670_int()//7670初始化函数

{


}*/



////***********SCCB-----OX7670************************//////////

void delay1ms(uint z)

{

uint j,k; 

    for(k=z;k;k--)

                       {                           

                      for(j=2666;j;j--) ;  //此处j不得小于27否则读不出数据

        }

                

}


void int_twi_sccb()

{

TWBR=50;/*设置SCL的时钟频率在19。230根据公式SCL FREQUENCY=CPU Clock frequency/16+2(TWBR)*4的TWPS次方

*/


}

//////以上是写寄存器程序/////////////////////////////////

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

//本函数为设置7670寄存器的最底层操作函数,

//无返回值

//ADD是要写的寄存器地址,DATE是向里面写入的数据

//

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

void write_ov7670_sccb_twi(uchar add,uchar date)//向add指定的地址内写入指定的数据

{

    //主发送模式程序/////////////////////////

    TWCR=0xa4;//插入开始新号使能总线,使能START

  delay1ms(1);

while(0==get_bit(TWCR,7));//检测起始信号是否发送?

while((TWSR&0xf8)!=0x08)

{

    while(1);    //出错

  

}

//START信号的正确响应码






TWDR=0x42;//写操作SCCB的器件地址0X42

TWCR=0x84;//重启启动数据的发送

delay1ms(1);

while(0==get_bit(TWCR,7));//检测数据信号是否发送?

while((TWSR&0XF8)!=0x18)

{


   while(1);    //出错

     }


//发送完毕有ACK应答响应码






TWDR=add;//写操作SCCB的寄存器子地址

TWCR=0x84;//重启启动数据的发送

delay1ms(1);

while(0==get_bit(TWCR,7));//检测数据信号是否发送?

while((TWSR&0XF8)!=0x28)

{

   while(1);    //出错

     }


//发送完毕有ACK应答响应码




TWDR=date;//写操作SCCB的寄存器数据

TWCR=0x84;//重启启动数据的发送

delay1ms(1);

while(0==get_bit(TWCR,7));//检测数据信号是否发送?

while((TWSR&0XF8)!=0x28)

{

   while(1);    //出错

     }


//发送完毕有ACK应答响应码


TWCR=0x94;//STOP信号




}

//////以上是写寄存器程序//////////////////////////////////////////////////////////////

init_OV7670_POWER_UP()//0V7670的初始化寄存器设置

{


delay1ms(5);//准备写入软件初始化

write_ov7670_sccb_twi(0x12,0x83);//RGB格式,初始化,彩条输出

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x0d,0x30);//1/4窗口,160*120

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x11,0x0f);//f(内部时钟)=12mhz/(15+1)=12000/16=750hz

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x15,0x20);//PCLK在行同步时没输出

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x3c,0x68);//默认

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x3e,0x00);//PCLK无分频

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x40,0xd0);//数据范围是00~ff。输出RGB565

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x42,0xc8);//1/4窗口,DSP彩色条输出允许

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x6b,0xc0);//PLL8分频

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x70,0x80);//八色图

delay1ms(5);//初始化完毕

write_ov7670_sccb_twi(0x71,0x00);//八色图

delay1ms(5);//设置完毕


}


void init_external_interrupt()//外部中断的初始化程序

{

     MCUCR=0x0f;//外部中断0和1都是低电平触发

  GICR=0x80;//使能外部中断1;

  SREG=0X80;//开启全局中断

  


}

//外部中断0作为PCLK像素时钟

#pragma interrupt_handler int0_isr:2

void int0_isr(void)//外部中断0的服务程序

{   

     if(38400==v)

  {

   SREG=0X80;

  }

  else

  v++;


     if(128!=i)

  {

     

    TAB0[i]=PINA;

         i++;

   j=0;

   }

else  

send_tab0_pc=1; //向PC发送数据标志

send_tab1_pc=0;//不向PC发送数据标志

  if(128!=j)

  {

  TAB1[j]=PINA;

        j++;

  }

  else

  i=0;

  send_tab1_pc=1;//向PC发送数据标志           

  send_tab0_pc=0;//不向PC发送数据标志

}

//外部中断1作为HREF行同步信号

#pragma interrupt_handler int1_isr:3

void int1_isr(void)//外部中断1的服务程序

{

     MCUCR=0x0f;//外部中断0和1都是上升沿触发

  GICR=0xc0;//使能外部中断1,0;

  SREG=0x80;//开启全局中断



}

void main()

{

uchar num;

delay1ms(20);//上电延时20ms

DDRA=0x00;

DDRD=0xff;

PORTD=0xff;

DDRC=0xff;//pc口设为输出

PORTC=0xff;//pc口初始化


USART_INT();//串口初始化

int_twi_sccb();//sccb初始化

init_OV7670_POWER_UP();//软件初始化

init_external_interrupt();//外部中断初始化

delay1ms(10);//无论读完还是写完都要等等

while(1)

{

if(send_tab0_pc)

{

       for(num=0;num<128;num++)

    {send_byte((TAB0[num]));}

}

if(send_tab1_pc)

{

       for(num=0;num<128;num++)

    {send_byte((TAB1[num]));}


}



}


}


关键字:AVR  8色  带位图  采集串口 引用地址:基于AVR的8色带位图采集串口(实验)

上一篇:基于AVR的SCCB读写程序
下一篇:LCD12864液晶显示程序

推荐阅读

由振威展览股份、中国电子企业协会联合主办的2019年3E北京国际消费电子博览会(简称“3E Beijing2019”),将于2019年8月2日至4日在北京国家会议中心隆重举办。  随着中国消费者购买力和对品质生活的追求不断提升,消费电子产品迭代及趋优趋势持续发酵,中国消费电子产业迎来空前机遇。业内人士透露,2017年全球电子产业的规模近1.8万亿美元。其中,中...
//犯的错:在51里RW(L命令、H数据)是直接焊成接地的//∴ 少了lcd_enable(); 这一函数{lcdrs = 0; lcdrw = 0; lcden = 0; delay(5); lcden = 1;}//少了这一函数设置就无法显示了#define PIC //说明,如果是51,你把这句删掉即可#define ww //说明,如果是PIC16F877A,你把这句删掉即可#ifdef ww#include<reg52.h>sbit lc...
“造整车,华为差得还太远了”。日前,华为智能汽车解决方案BU总裁王军在接受盖世汽车等媒体采访时直言。因被曝欲将汽车业务划归消费者业务,加之此前华为消费者业务CEO余承东频频为汽车业务“站台”,给华为汽车BU业务方向从to B转向to C增添了诸多想象空间,近日关于“华为造车”的言论再度甚嚣尘上。华为的否认也是一如既往地干脆。王军认为,对于一...
2021年11月19日-专注于引入新品推动行业创新的电子元器件分销商贸泽电子 (Mouser Electronics) 宣布将于11月23-26日推出2021技术创新周主题周的收官主题“新基建”专场,这也是继今年IoT、智能机器人专题后推出的又一热门专题。本次活动特别邀请到来自Analog Devices, Bel, Littelfuse, Microchip, Molex, Vicor, Würth Elektronik等国际知名...

史海拾趣

问答坊 | AI 解惑

一种变参数PID 控制器在浇注机器人伺服系统中的应用

本文在传统变参数PID 控制算法的基础上, 针对其不足之处, 提出一种继电型变参数PID 控制器. 结合浇注机器人关节伺服系统解耦模型, 将继电型变参数PID 算法用作机器人伺服控制, 仿真效果很好, 达到了高精度的性能指标要求, 并在实际系统上作了尝试.…

查看全部问答∨

CMOS 和 TTL

CMOS 和 TTL的 \\基本知识…

查看全部问答∨

求助:水族智能控制器电路图

本帖最后由 paulhyde 于 2014-9-15 09:41 编辑 求助: 请问谁有水族智能控制器的电路图,帮忙一下,请发上来,谢谢!!!  …

查看全部问答∨

80c51f系列单片机制作的程控开关电源

80c51f系列单片机制作的程控开关电源  此电源是直接用键盘输入所需电压控制的  用的时候比较方便…

查看全部问答∨

KEIL UVSION 3完整版

各位朋友,我在用单片机KEIL UVSION 编程软件,可是该软件有2K代码限制,各位能否帮我想办法弄到完整版的…

查看全部问答∨

通过usb连接PC和充电器,设备端如何区分是连接了PC,还是连接了PC

              具体问题是这样的:         设备通过usb连接PC和充电器时,设备端可以判断usb的拔插,但是连接上了之后,设备端就不能区分到底是连接上了PC,还是连接上 ...…

查看全部问答∨

串联电池组单节电压采集方案???

哪位大虾做国串联电池组单节电压采集的,能给个思路吗?…

查看全部问答∨

大家看看这样的经历跳槽值多少钱

学历:研究生 工作经历:研二开始上班           做过单片机,FPGA,画过PCB都不是很精           作过基于CE的小项目,但是基本是0代码           ...…

查看全部问答∨

安装evc4.0 sp4的时候出错

安装evc4成功,但是安装evc sp4多次,老是在最后弹出这么个提示,怎么办啊????…

查看全部问答∨

wince 实现SIP IME的问题

我自己挂在SIP下实现了一个输入法,在我的输入法界面上有一个功能按钮是退出输入法,目前我可以实现的是隐藏输入法,也可以返回到应用的edit控件,但我的edit控件是在收到on_setfocus的时候调用SipShowIM(SIPF_ON)来打开我的输入法,而在输入法自 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved