电子文章 | 电子资料下载 | 家电维修 | 维修资料下载 | 加入收藏 | 全站地图
您现在所在位置:电子爱好者维修技术维修教程知识电子制作基于AM-209M芯片的视频16画面分割器

基于AM-209M芯片的视频16画面分割器

09-08 11:53:51 | http://www.5idzw.com | 电子制作 | 人气:555
标签:电子小制作,http://www.5idzw.com 基于AM-209M芯片的视频16画面分割器,http://www.5idzw.com

根据单片机控制功能的要求,该系统软件由主程序和串口中断子程序两部分组成,主程序流程图如图6所示。该软件的编程重点是:视频编解码及画面分割处理初始化;键控及菜单显示程序;PC命令的判断和执行;更新系统配置及对数据的保存等。

4.1 访问AM-209M

单片机AT89C55和AM-209M芯片的信号连接关系是:单片机的P0.0~P0.7和AM-209M的8位并行数据接口mdata[0:7]相连;P2.0和AM-209M片选信号相连;P2.1则连到写使能信号线wren;P2.2连至地址使能信号线adem;P2.3和读使能信号线rden相连;INT1和场同步中断信号mpout相连。图4给出了这些信号线的连接方法,下面给出的是对AM-209M的字节写程序(并口控制的C程序):

#define AM209_NOP(); _nop_();_nop_();

#define MDATA_BUS P0 //AM-209M数据总线

sbit MCSB_AM209=P2^0; //AM-209M片选

sbit WREN_AM209=P2^1; //写使能

sbit ADEN_AM209=P2^2; //地址锁存使能

sbit RDEN_AM209=P2^3; //读使能

void Byte_wr_am209(unsigned char am209_addr,unsigned char am209_data)

{

EA=0;

MDATA_BUS=0xff;

ADEN_AM209=0;

WREN_AM209=1;

AM209_NOP();

MCSB_AM209=0; //AM209M芯片使能

MDATA_BUS=am209 addr; //发送地址

AM209_NOP();

ADEN_AM209=1;

AM209_NOP();

ADEN_AM209=0;

AM209_NOP();

MDTA_BUS=am209 data; //写入数据

AM209_NOP();

WREN_AM209=0;

AM209_NOP();

WREN_AM209=1;

AM209_NOP();

MCSB_AM209=1;

AM209_NOP();

EA=1;

}

4.2 与PC的串行通信

PC机与单片机通信的数据格式有视频画面命令格式和时间调整命令格式两种。视频画面命令格式为:桢头+命令字+命令地址+校验和;时间调整命令数据格式为:桢头+命令字+秒+分+时+日+星期+月+年+校验和。所有数据均为十六进制,其中时间显示为24小时制,采用两字节BCD码。SUM为SUM字节之前所有字节的累加和,为单字节,不计溢出。

在单片机串口中断子程序中,可根据接收到的命令长度来判断是否接收到一个完整的命令格式。接收到一个完整命令格式则设置串口接收标志为1。并根据这个标志位进入主程序中的PC命令处理程序,同时由接收到的命令号来识别PC发送的各种命令。如:视频画面命令格式中命令字如果是0X16,则在监视器上显示输出16画面。此外,依据接收到的校验和可以判断接收PC数据的正确性,防止对分割器的误操作。该系统的波特率为9600bps,单片机的定时器2设定在自动重装方式2。

4.3 键控程序

有键按下时,P2.7变为0。P2.6发送串行数据0XFE到74LS164,若此时P2.7输入仍为0,则表示SW1键已按下(见图5);否则0XFE左移1位(即0xFD),若P2.7输入仍为0,则表示SW2键已按下;依此类推…,否则0XFE左移7位(即0X7F),若此时P2.7输入为0,则表示SW8键按下。左读取键值并释放按键后,系统会点亮LED以指示键按下。例如,当SW1按下再释放后,P2.6发送数据0XFE,此时P2.4置为0,将点亮D501以指示SW1按下。键盘扫描子程序如下:

//键盘扫描子程序,键值保存在key_value中

sbit led_on=P2^4; //LED点亮使能,低有效

sbit key_clk=P2^5; //串行移位时钟

sbit shift_data=P2^6; //移位数据输入

sbit scan_data=P2^7; //键扫描数据输入

void Key_read_service()

{

uchar temp,temp1,temp2;

uchar i,j;

Key_flag=0; //键标志清零

scandata=1;

led_on=1; //关闭LED

for(i=0;i<8;i++) //74LS164并行输出置为0

{

shift_data=0;

_nop_();

key_clk=0;

_nop_();

key_clk=1;

}

if(scandata= =0)

{ //有键按下

temp=0xfe;

for(j=0;j<8;j++) //发送8个数据字节

{

temp1=temp;

temp2=~temp;

for=(i=0;i<8;i++)//串行移位1个字节

{

if(temp1 & 0x80==0x80)

shift_data=1;

else

shift_data=0;

_nop_();

key_clk=0;

_nop_();

key_clk=1;

}

delay_10ms();//延时10ms去抖

if(scandata==0)//再次判断是否按键?

{ //键有效

key_value=temp2;//存储值

key_flag=1;//置键有效标志位

break;

}

temp2=temp2<<1;//不是当前键按下

temp=~temp2; 按下,左移一位判断下一个键

}

}

}

上一页  [1] [2] 

,基于AM-209M芯片的视频16画面分割器
关于《基于AM-209M芯片的视频16画面分割器》的更多文章