?? udp6453gd101.c
字號:
#include <C:\KEIL\INC\reg52.h>
#include <C:\KEIL\INC\absacc.h>
#include <C:\KEIL\INC\string.h>
//#include <C:\KEIL\INC\at89x52.h>
#define uchar unsigned char
#define UCHAR unsigned char
#define uint unsigned int
#define UINT unsigned int
#define ulong unsigned long
#define ULONG unsigned long
sfr T2MOD =0xC9;
#define LL_INT_ADDR 0
#define AWB2_ADDR 1
#define AGCMAX_ADDR 3
#define BLCOF_ADDR 4
#define CAM_ID_ADDR 5
#define ALC_ELC_ADDR 6
#define SHUTTER_ADDR 7
#define AGC_ADDR 8
#define SENS_UP_ADDR 9
#define ATW_AWC_ADDR 10
#define DET_ADDR 11
#define DC_VIDEO_ADDR 12
#define BT_CAM_X_ADDR 13
#define BT_CAM_Y_ADDR 14
#define ELC_ALC_CONT_ADDR 15
#define COARSE_ADDR 16
#define FINE_ADDR 17
#define R_ADDR 18
#define B_ADDR 19
#define LEVEL_ADDR 20
#define ALARM_ADDR 21
#define BW_TINE_ADDR 22
#define BW_LEVEL_ADDR 23
#define UP_SIDE_DOWN_ADDR 24
#define CHROMA_GAIN_ADDR 25
#define AP_GAIN_ADDR 26
#define PEDESTAL_ADDR 27
#define BW_ADDR 28
#define BURST_ADDR 29
#define CAM_ID_HZ_ADDR0 30
#define CAM_ID_HZ_ADDR1 31
#define CAM_ID_HZ_ADDR2 32
#define CAM_ID_HZ_ADDR3 33
#define CAM_ID_HZ_JS_ADDR 34
#define BT_ADDR 40
UCHAR LL_INT_OE;
UCHAR AGC_OE;
UCHAR SENS_UP_OE;
UCHAR ATW_AWC_OE;
bit DET_OE;
bit ALC_ELC_OE;
bit CAM_ID_OE;
UCHAR SHUTTER_OE;
bit DC_VIDEO_OE;
bit MENU_OE;
UCHAR ELC_ALC_CONT;
bit BLCOF_OE;
UCHAR COARSE_OE;
UCHAR FINE_OE;
UCHAR R_OE;
UCHAR B_OE;
UCHAR LEVEL_OE;
bit ALARM_OE;
UCHAR BW_TIME_OE;
UINT bw_time_js_bak,bw_time_js_min;
bit BW_LEVEL_OE;
bit UP_SIDE_DOWN_OE;
UCHAR CHROMA_GAIN_OE;
UCHAR AP_GAIN_OE;
UCHAR PEDESTAL_OE;
UCHAR BW_OE;
bit BURST_OE;
#define COMP_55_ADDR1 255
#define COMP_AA_ADDR1 254
#define COMP_55_ADDR2 253
#define COMP_AA_ADDR2 252
uchar code *DATA_P;
#define HZ_ADDR 0x4400
/********10ms定時標志*****************/
bit dsbz;
UINT count_timer1; /*定時器1進入定時中斷次數計數*/
uchar bdata data_ls;
sbit SDA7 =data_ls^7;
sbit SDA0 =data_ls^0;
sbit DOG =P3^0; /*看門狗*/
/*******AT24C02控制***********/
sbit EEROM_SDA =P0^5; /*AT24C02數據*/
sbit EEROM_SCL =P0^7; /*AT24C02時鐘*/
sbit EEROM_WP =P3^1; /*AT24C02使能*/
/*******uPD6453控制***********/
//sbit uPD6453_PCL =P2^4; /*uPD6453復位*/
sbit uPD6453_DATA =P0^5; /*uPD6453數據*/
sbit uPD6453_CS =P0^6; /*uPD6453片選*/
sbit uPD6453_CLK =P0^7; /*uPD6453時鐘*/
/*******鍵盤數據定義******************/
UCHAR bdata keyrd_ls; /*鍵盤讀寄存器0*/
bit bitkey;
bit vactive;
uchar keyrd,keyval,keyval_ls;
bit key_lr_bz,key_ud_bz;
UCHAR ley_lr_js;
//sbit KEY_L =P0^0; /*SW3*/
//sbit KEY_DOWN=P0^1; /*SW4*/
//sbit KEY_R =P0^2; /*SW5*/
//sbit KEY_SET =P0^3; /*SW6*/
//sbit KEY_UP =P0^4; /*SW7*/
/*#define VACTIVE_RLSET 0x07
#define VACTIVE_RL 0x03
#define VACTIVE_L 0x02
#define VACTIVE_DOWN 0x10
#define VACTIVE_R 0x01
#define VACTIVE_SET 0x04
#define VACTIVE_UP 0x08*/
#define VACTIVE_RLSET 0xf8
#define VACTIVE_RL 0xfc
#define VACTIVE_L 0xfd
#define VACTIVE_DOWN 0xef
#define VACTIVE_R 0xfe
#define VACTIVE_SET 0xfb
#define VACTIVE_UP 0xf7
/*******攝像機控制接口**********/
sbit LL_INT =P1^0; /*1=內同步;0=外同步*/
sbit AWB2 =P1^1; /**/
sbit MIRIS =P1^2; /**/
sbit AGCMAX =P1^3; /**/
sbit BLCOF =P1^4; /**/
sbit SYNC_INC=P1^5; /**/
sbit SYNC_DEC=P1^6; /**/
sbit BW =P1^7; /**/
sbit BW_RD =P3^3; /**/
sbit MIRIS_SEL=P3^2; /*0:DC;1:VIDEO*/
bit BW_RD_BAK;
bit BW_RD_BAK1;
bit alarm_bz;
/********報警接口***************/
sbit ALARM_IN =P3^6; /**/
sbit ALARM_OUT =P3^7; /**/
UCHAR alarm_out_time;
/********電機控制***************/
sbit EAN =P2^7; /**/
sbit IN1 =P3^5; /**/
sbit IN2 =P3^4; /**/
/********測試程序***************/
bit test_bz; /*0=否;1=測試*/
/*TEST MENU*/
static uchar code menu_test0[] ={"ALC/ELC"};
static uchar code menu_test1[] ={"AGC"};
static uchar code menu_test2[] ={"BLC"};
static uchar code menu_test3[] ={"WHITEqBAL"};
static uchar code menu_test4[] ={"SYNC"};
static uchar code menu_test5[] ={"LENSqDRIVE"};
static uchar code menu_test6[] ={"LEVEL"};
static uchar code menu_test7[] ={"BW"};
static uchar code menu_test8[] ={"RESET"};
uchar code ASCII[86]={
0xcf,0xcb,0xcf,0xc7,0xc8,0xc9,0xdc,0xca,
0xdd,0xde,0xd6,0xd0,0xe6,0xd1,0xe3,0xcd,
0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,
0x08,0x09,0xe1,0xe2,0xdf,0xc7,0xe0,0xcc,
0xe9,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10,
0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x00,
0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,
0x21,0x22,0x23,0xd3,0xcf,0xd4,0xe4,0xe7,
0xe6,0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,
0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,
0xff,0xcf,0xe5,0xd2,0xd5,0xe9};
/*sp ! " # $ % & '
( ) * + , - . /
0 1 2 3 4 5 6 7
8 9 : ; < = > ?
@ A B C D E F G
H I J K L M N O
P Q R S T U V W
X Y Z [ \ ] ^ _
` a b c d e f g
h i j k l m n o
p q r s t u*/
uchar code enter[36]={
0x90,0x00,
0x90,0x00,
0x90,0x00,
0x9d,0xb0,
0x9d,0xb8,
0x9d,0xbc,
0x90,0x1c,
0x90,0x1c,
0x90,0x1c,
0x90,0x1c,
0x90,0x1c,
0x90,0x1c,
0x90,0x1c,
0x90,0x7f,
0x90,0x3e,
0x90,0x1c,
0x90,0x08,
0x90,0x00,};
/**/
uchar code tszf[36]={
0x90,0x00,
0x90,0x00,
0x90,0x00,
0x90,0x00,
0x90,0x60,
0x90,0x60,
0x96,0x66,
0x97,0x6e,
0x93,0xfc,
0x91,0xf8,
0x93,0xfc,
0x97,0x6e,
0x96,0x66,
0x90,0x60,
0x90,0x40,
0x90,0x00,
0x90,0x00,
0x90,0x00,};
/**********標題***********************/
UCHAR bt_cam[17];
UCHAR bt_cam_x,bt_cam_y;
UCHAR BT_CAM_MAX_X;
/********菜單*************/
uchar menu_p[]={0,0,0,0,0,0}; /*當前菜單指針(當前在第幾級菜單下0-4;第1級0-7;第2級;第3級;)*/
bit menu_esc_bz; /*菜單標志:1=菜單狀態;0=否*/
ULONG menu_time_js;
#define MENU_ESC_TIME 300000
static uchar code menu_add_dec[]={"-qqqqqqq+"};
static uchar code menu_ret[]={"RET"};
static uchar code menu_end[]={"END"};
static uchar code menu_mask_set[]={"MASK SET a"};
/*MAIN MENU*/
static uchar code menu_main0[] ={"bbqCAMqSETqUPqbb"};
static uchar code menu_main1[] ={"CAMERAqID"};
static uchar code menu_main2[] ={"ALC/ELC"};
static uchar code menu_main3[] ={"SHUTTER"};
static uchar code menu_main4[] ={"AGC"};
static uchar code menu_main5[] ={"SENSqUP"};
static uchar code menu_main6[] ={"SYNC"};
static uchar code menu_main7[] ={"WHITEqBAL"};
static uchar code menu_main8[] ={"MOTIONqDET"};
static uchar code menu_main9[] ={"LENSqDRIVE"};
//static uchar code menu_main10[]={"END"};
static uchar code menu_main11[]={"SETqUPqDISABLE"};
UCHAR code menu_main_y[] ={11,0,1,2,3,4,5,6,7,8,9,11}; /*菜單項數;各項Y值*/
static uchar code crt_on_off[2][4]={{'O','F','F',0},{'O','N','q',0}};
static uchar code crt_alc_elc[2][4]={{'E','L','C',0},{'A','L','C',0}};
/*電子快門:OFF;1/120;1/250;1/500;1/1000;1/2000;1/4000;1/10000*/
static uchar code crt_shutter[9][8]={{'O','F','F','q','q','q','q',0},{'1','/','1','2','0','q','q',0},{'1','/','2','5','0','q','q',0},{'1','/','5','0','0','q','q',0},{'1','/','1','0','0','0','q',0},{'1','/','2','0','0','0','q',0},{'1','/','4','0','0','0','q',0},{'1','/','1','0','0','0','0',0},{'_','_','_','q','q','q','q',0}};
/*靈敏度:0=OFF;1=X2 AUTO;2=X4 AUTO;3=X6 AUTO;4=X10 AUTO;*/
/*靈敏度:5=X2 FIX;6=X4 FIX;7=X6 FIX;8=X10 FIX;9=X16 FIX;10=X32 FIX*/
static uchar code crt_sens_up[12][4]={{'O','F','F',0},{'X','2','q',0},{'X','4','q',0},{'X','6','q',0},{'X','1','0',0},{'O','F','F',0},{'X','2','q',0},{'X','4','q',0},{'X','6','q',0},{'X','1','0',0},{'X','1','6',0},{'X','3','2',0}};
static uchar code crt_auto_fix[2][5]={{'F','I','X','q',0},{'A','U','T','O',0}};
//static uchar code crt_ll_int[2][5]={{'I','N','T','q',0},{'L','L','q','q',0}};
static uchar code crt_ll_int[4][10]={{'I','N','T','q','q','q','q','q','q',0},{'L','L','q','q','q','q','q','q','q',0},{'E','X','T','(','V','B','S',')','q',0},{'E','X','T','(','V','S',')','q','q',0}};
static uchar code crt_atw_awc[3][5]={{'A','T','W','1',0},{'A','T','W','2',0},{'A','W','C',0,0}};
static uchar code crt_enable_disable[2][8]={{'D','I','S','A','B','L','E',0},{'E','N','A','B','L','E','q',0}};
static uchar code crt_dc_video[2][6]={{'V','I','D','E','O',0},{'D','C','q','q','q',0}};
static uchar code crt_agc[3][10]={{'O','F','F','q','q','q','q','q','q',0},{'O','N','(','D','N','R','-','H',')',0},{'O','N','(','D','N','R','-','L',')',0}};
static uchar code crt_bw_level[2][5]={{'H','I','G','H',0},{'L','O','W','q',0}};
static uchar code crt_bw[5][6]={{'O','F','F','q','q',0},{'O','N','q','q','q',0},{'E','X','T','q','q',0},{'A','U','T','O','2',0},{'A','U','T','O','1',0}};
/*CAM ID SET*/
static uchar code menu_cam_id_set0[]={"0123456789"};
static uchar code menu_cam_id_set1[]={"ABCDEFGHIJKLM"};
static uchar code menu_cam_id_set2[]={"N0PQRSTUVWXYZ"};
static uchar code menu_cam_id_set3[]={"().ur:;&`/!?_"};
static uchar code menu_cam_id_set4[]={"+-<>%'$#[]st"};
static uchar code menu_cam_id_set5[]={"SPACE"};
static uchar code menu_cam_id_set6[]={"POSI"};
static uchar code menu_cam_id_set9[]={"RESET"};
static uchar code menu_cam_id_set10[]={"CHR1"};
static uchar code menu_cam_id_set11[]={"CHR2"};
static uchar code menu_cam_id_set12[]={"CHR3"};
static uchar code menu_cam_id_data[]={"0123456789ABCDEFGHIJKLMN0PQRSTUVWXYZ().bm:;&`/!?_+-<>%'$#[]no"};
uchar code menu_cam_id_set_y[]={1,1,2,3,4,5,7,8,81};
uchar cam_id_data_js,cam_id_js;
UCHAR cam_id_lx;
UCHAR cam_id_hz_x;
UCHAR cam_id_hz_y;
/*ELC/ALC CONT*/
static uchar code menu_elc_alc_cont_set0[]={"qqqqbbqELCqCONTqbb"};
static uchar code menu_elc_alc_cont_set1[]={"qqqqbbqALCqCONTqbb"};
static uchar code menu_elc_alc_cont_set2[]={"qqqqBACK LIGHT COMP"};
static uchar code menu_elc_alc_cont_set3[]={"SUPER-D2"};
static uchar code menu_elc_alc_cont_set5[]={"LEVEL"};
uchar code menu_elc_alc_cont_set_y[]={5,0,1,3,5,7,8,11};
/*LL*/
static uchar code menu_ll_set0[]={"qqqqqqqbbqSYNCqbb"};
static uchar code menu_ll_set1[]={"V PHASE"};
static uchar code menu_ll_set2[]={"COARSE"};
static uchar code menu_ll_set3[]={"FINE"};
UCHAR code menu_ll_set_y[]={3,0,2,4,6,7,11};
/*ATW*/
static uchar code menu_atw_set0[]={"qqqqqqqbbqqATWqqbb"};
static uchar code menu_atw_set1[]={"R"};
static uchar code menu_atw_set3[]={"B"};
UCHAR code menu_atw_set_y[]={3,0,2,3,4,5,6,11};
/*MOTION DETECT*/
static uchar code menu_md_set0[]={"qbbqMOTION DETECTqbb"};
static uchar code menu_md_set1[]={"LEVEL"};
static uchar code menu_md_set3[]={"DISPLAY MODE a"};
static uchar code menu_md_set4[]={"qqqqALARM"};
UCHAR code menu_md_set_y[]={3,0,2,3,4,6,8,11};
/*SPECIAL*/
static uchar code menu_special_set0[]={"qqqqbbqSPECIALqbb"};
static uchar code menu_special_set1[]={"UP SIDE DOWN"};
static uchar code menu_special_set2[]={"CHROMA GAIN"};
static uchar code menu_special_set3[]={"AP GAIN"};
static uchar code menu_special_set4[]={"PEDESTAL"};
static uchar code menu_special_set5[]={"BW"};
static uchar code menu_special_set6[]={"BURST(BW)"};
static uchar code menu_special_set7[]={"CAMERA RESET"};
UCHAR code menu_special_set_y[]={9,0,2,3,4,5,8,9,10,11};
/*BW AUTO*/
static uchar code menu_bw_auto_set0[]={"qqqqbbqBW AUTOqqbb"};
static uchar code menu_bw_auto_set1[]={"LEVEL"};
static uchar code menu_bw_auto_set2[]={"DURATION TIME"};
static uchar code menu_bw_auto_set3[]={"qqqqqqqqqqqqqqS L"};
UCHAR code menu_bw_auto_set_y[]={3,0,2,3,4,11};
/*****************************************************/
void star_cpu();
void uPD6453_8(UCHAR updcom);
void uPD6453_16(UCHAR updcom0,uchar updcom1);
void crtzf(UCHAR zf_x,uchar zf_y,uchar zf,uchar zf_sd);
void crtzf_ch(UCHAR zf_x,uchar zf_y,uchar *zf,uchar zf_sd);
void clr_crt();
void delay(UCHAR delay_time);
void eerom_star();
void eerom_wr_byte(uchar eerom_data);
void eerom_ack();
void eerom_stop();
UCHAR eerom_rd(uchar data_addr);
uchar eerom_byte_wr(uchar data_addr,uchar wdata);
void menu_csh();
void star_lcall();
void key_scan();
void key_cl();
void bt_cam_xy_cl();
void posi_menu_cl(key_menu);
/*******定時器0中斷************/
void timer0(void) interrupt 1 using 3
{
dsbz=1;
TH0=0xBE; /*設置定時器0為10ms*/
TL0=0xE5;
//TH0=0xDF; /*設置定時器0為5ms*/
//TL0=0x72;
TR0=0;
}
/*******定時器1中斷************/
void timer1(void) interrupt 3 using 3
{
TR1=0;
//TH1=0xDF; /*設置定時器1為5ms晶振=20MHz;1.25ms晶振=16MHz*/
//TL1=0x75;
TH1=0xF9; /*設置定時器1為1ms晶振=20MHz;1.25ms晶振=16MHz*/
TL1=0x7D;
count_timer1++; /*定時器1進入定時中斷次數計數*/
if(count_timer1>0x5000) count_timer1=0; /*定時器1進入定時中斷次數計數*/
alarm_out_time++;
if(alarm_out_time>210)
{
alarm_bz=0;
alarm_out_time=0;
}
if(menu_esc_bz==1) menu_time_js++;
else menu_time_js=0;
bw_time_js_bak++;
if(bw_time_js_bak>=1000)
{
bw_time_js_min++;
bw_time_js_bak=0;
}
TR1=1;
}
/*******uPD6453GT 8位命令輸出子程序******/
/*******void uPD6453_8(路號,命令)********/
void uPD6453_8(UCHAR updcom)
{
uchar i;
uPD6453_CLK =1; /*uPD6453時鐘*/
uPD6453_CS=0;
data_ls=updcom;
for(i=0;i<8;i++)
{
uPD6453_CLK=0;
DOG=!DOG;
uPD6453_DATA=SDA7;
data_ls=data_ls<<1;
uPD6453_CLK=1;
DOG=!DOG;
}
uPD6453_CLK=1;
DOG=!DOG;
uPD6453_CS=1;
uPD6453_CLK =0; /*uPD6453時鐘*/
uPD6453_DATA=1;
}
/*******uPD6453GT 16位命令輸出子程序******/
/****void uPD6453_16(路號,命令0,命令1)****/
void uPD6453_16(UCHAR updcom0,uchar updcom1)
{
uchar i;
uPD6453_CLK =1; /*uPD6453時鐘*/
uPD6453_CS=0;
data_ls=updcom0;
for(i=0;i<8;i++)
{
uPD6453_CLK=0;
DOG=!DOG;
uPD6453_DATA=SDA7;
data_ls=data_ls<<1;
uPD6453_CLK=1;
DOG=!DOG;
}
uPD6453_CLK=1;
DOG=!DOG;
data_ls=updcom1;
for(i=0;i<8;i++)
{
uPD6453_CLK=0;
DOG=!DOG;
uPD6453_DATA=SDA7;
data_ls=data_ls<<1;
uPD6453_CLK=1;
DOG=!DOG;
}
uPD6453_CLK=1;
DOG=!DOG;
uPD6453_CS=1;
uPD6453_CLK =0; /*uPD6453時鐘*/
uPD6453_DATA=1;
}
/*******在(x,y)位置顯示一個字符***************************/
/*void crtzf(路號,x位置,y位置,字符,是否閃動--1閃動,0不閃)*/
void crtzf(UCHAR zf_x,uchar zf_y,uchar zf,uchar zf_sd)
{
uchar zf_ls_data;
uchar zf_ls_com;
zf_ls_data=zf_y<<5;
zf_ls_data=zf_ls_data + zf_x;
zf_ls_com=zf_y>>3;
zf_ls_com=zf_ls_com | 0x84;
uPD6453_16(zf_ls_com,zf_ls_data); /*顯示位置命令*/
zf_ls_com=zf_sd & 0x01;
zf_ls_com=zf_sd | 0xCE;
zf_ls_data=zf-0x20;
uPD6453_16(zf_ls_com,ASCII[zf_ls_data]); /*顯示字符命令*/
}
/*******在(x,y)位置顯示一串字符***************************/
/*void crtzf_ch(路號,x位置,y位置,字符串,是否閃動--1閃動,0不閃)*/
void crtzf_ch(UCHAR zf_x,uchar zf_y,uchar *zf,uchar zf_sd)
{
uchar zf_ls_data;
uchar zf_ls_com;
uchar zf_i;
zf_ls_data=zf_y<<5;
zf_ls_data=zf_ls_data + zf_x;
zf_ls_com=zf_y>>3;
zf_ls_com=zf_ls_com | 0x84;
uPD6453_16(zf_ls_com,zf_ls_data); /*顯示位置命令*/
for(zf_i=0;zf_i<24;zf_i++)
{
if(*(zf+zf_i)==0) break;
if(*(zf+zf_i)<0x20) break;
if(*(zf+zf_i)>=0x80) break;
zf_ls_com=zf_sd & 0x01;
zf_ls_com=zf_sd | 0xCE;
zf_ls_data=*(zf+zf_i)-0x20;
uPD6453_16(zf_ls_com,ASCII[zf_ls_data]); /*顯示字符命令*/
}
}
/*******清屏子程序***************************/
/*void clr_crt()*/
void clr_crt()
{ int zf_i;
uPD6453_16(0x84,0); /*顯示位置命令*/
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -