attachment download最近都在一个视频字符叠加的项目,做了个NTSC/PAL自动识别功能,发个demo程序和SCH,作个备份。因为有网络,找资料方便很多,感谢那些无私开源的人,他们是一群很可爱的人,他们应该得到更多理解和尊重。
#include <reg52.h>
#include <string.h>
#define uchar unsigned charbit read_flag=0;
uchar int0_count;
uchar one_sec;
bit syst_flag;void init_serialcomm(void)
{
TMOD=0x20;
TR1=1;
TH1=0xfd; //TH1=0xfa; 22.1184 MHz @9600; TH1=0xfd; 11.0592 MHz
TL1=0xfd; //TL1=0xfa; 22.1184 MHz @9600; TH1=0xfd; 11.0592 MHz
SCON=0x50;
EA=1;
ES=1;
}
//向串口发送一个字符
void send_char_com(unsigned char ch)
{
SBUF=ch;
while(TI==0);
TI=0;
}
//向串口发送一个字符串,strlen为该字符串长度
void send_string_com(unsigned char *str,unsigned int strlen)
{
unsigned int k=0;
do
{
send_char_com(*(str + k));
k++;
} while(k < strlen);
}
//串口接收中断函数
void serial () interrupt 4 using 3
{// uchar temp;
if(RI)
{
// temp=SBUF;
// send_char_com(temp);
}
}void init_ex()
{
IT0=1;
EX0=1;
RCAP2H =0x10; //赋T2的预置值0x1000,溢出30次就是1秒钟
RCAP2L =0x00;
ET2=1; //打开定时器2中断
EA=1;
}void Into() interrupt 0
{
TR2=1; //启动定时器
int0_count++;
}void syst()
{
uchar syst_count,syst_a,syst_b,syst_c;
if(one_sec) //发现有时间溢出标记,进入处理
{
one_sec=0;
syst_count++;
ET2=1;if(syst_count==1)
{
syst_a=int0_count;
send_char_com(syst_a);
int0_count=0;
}
if(syst_count==2)
{
syst_b=int0_count;
send_char_com(syst_b);
int0_count=0;
}
if(syst_count==3)
{
syst_c=int0_count;
send_char_com(syst_c);
int0_count=0;
}if((syst_b==0x19)&&(syst_c==0x19)) //0x19---即是25,50hz,pal
{
send_string_com("pal ",4);
send_char_com(0xaa);
}
if((syst_b==0x1e)&&(syst_c==0x1e)) //0x1e---即是30,60hz,ntsc
{
send_string_com("ntsc ",5);
send_char_com(0xbb);
}if(syst_count>=3)
{
ET2=0;
EX0=0;
int0_count=0;
}
}
}//定时器2中断
timer2() interrupt 5
{
static uchar t;
TF2=0;
t++;
if(t==15) //T2的预置值0x1000,溢出30次就是1秒钟,11.0592MHz
{
t=0;
one_sec=1;//每次长时间的溢出,就置一个标记,以便主程序处理
ET2=0;
}
}main()
{
init_ex();
init_serialcomm(); //初始化串口
while(1)
{
syst();
}
}
用户444315 2013-8-2 09:53
用户610474 2012-12-28 20:36