亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cam.c

?? 基于單片機的串口攝像頭模塊的讀寫C語言源程序
?? C
字號:
#include <SST89x5xxRD2.h>
#define uchar unsigned char
#define uint unsigned int
#define Width 10	 //圖像的寬80(8*10)個像素
#define Height 32	 //圖像的高
uchar lcd_x;//lcd的x坐標
uchar lcd_y;//lcd的y坐標

sbit cs=P3^3;	//定義LCD的D/#C控制口
sbit std=P3^5;	//定義LCD的串行數據端口
sbit sclk=P3^7; //定義LCD的串行時鐘端口                   
sbit rst=P3^6;                  
sbit key=P2^0;

uchar code SYNC_ID[]=		{0xaa,0x0d,0x00,0x00,0x00,0x00}; 
uchar code INITAL_ID[]=		{0xaa,0x01,0x00,0x01,0x01,0x01};	//2位灰度圖160*120,4800B
uchar code BAUDRATE_ID[]=	{0xaa,0x07,0xbf,0x01,0x00,0x00};	//baudrate=9600
uchar code SNAPSHOT_ID[]=	{0xaa,0x05,0x01,0x00,0x00,0x00};
uchar code GETPICTURE_ID[]=	{0xaa,0x04,0x01,0x00,0x00,0x00};
uchar code RESET1_ID[]=		{0xaa,0x08,0x01,0x00,0x00,0x00};//狀態寄存器復位
uchar code RESET2_ID[]=		{0xaa,0x08,0x00,0x00,0x00,0x00};//完全復位
uchar code SLEEP_ID[]=		{0xaa,0x09,0x00,0x00,0x00,0x00};
uchar code ACK1_ID[]=		{0xaa,0x0e,0x0d,0x00,0x00,0x00};
uchar code ACK2_ID[]=		{0xaa,0x0e,0x0a,0x00,0x00,0x00};

//定義兩個隊列用來緩存圖片數據
uchar xdata Picture_Dat1[256]; //內部擴展數據RAM(00H~2FFH)
uchar xdata Picture_Dat2[256];
uchar idata front=0,rear=0;//隊列的隊頭指針和隊尾指針
bit bank;//bank=0指向Picture_Dat1,否則指向Picture_Dat2

uint idata countr;//已接受的數據(byte)

bit error;//傳輸出錯

void delay(uchar mm)
{
	uchar idata i;
	for(i=0;i<mm;i++)
		;
}

void delay_1ms()
{
	uchar idata i;
	for(i=0;i<255;i++)
		;
	for(i=0;i<42;i++)
		;
}

void delay_ms(uchar t)
{
	uchar idata i;
	for(i=0;i<t;i++)
		delay_1ms();
}

void wr_lcd (uchar dat_comm,uchar content)
{
	uchar idata a,i,j;
	delay(50);
	a=content;
	cs=1;
	sclk=0;
	std=1;
	for(i=0;i<5;i++)
	{
		sclk=1;
		sclk=0;
	}
	std=0;
	sclk=1;
	sclk=0;
	if(dat_comm)
 		std=1;//data
	else
		std=0;//command
	sclk=1;
	sclk=0;
	std=0;
	sclk=1;
	sclk=0;
	for(j=0;j<2;j++)
	{
		for(i=0;i<4;i++)
		{
			a=a<<1;
			std=CY;
			sclk=1;
			sclk=0;
		}
		std=0;
		for(i=0;i<4;i++)
		{
			sclk=1;
			sclk=0;
		}
	}
}

void init_lcd (void)
{
	rst=0;
	delay(100);
	rst=1;
	wr_lcd(0,0x30);  //30---基本指令動作   
	wr_lcd(0,0x01);  //清屏,地址指針指向00H
	delay(100);
	wr_lcd(0,0x06);  //光標的移動方向
	wr_lcd(0,0x0c);  //開顯示,關游標
}







//1、換晶振,用22.1184M晶振,在TH1=0xff時,剛好可以產生115200波特率。

//2、采用6個時鐘周期的單片機(換單片機啊。。。)

//3、增強型51單片機有定時器2!(幸好偶用的是增強型。。。)

//就用第三種方法啦!這時的公式如下:

//波特率=11059200/(32×[65536-(RCAP2H,RCAP2L)])

//其中的RCAP2H,RCAP2L為自動重裝值,由上式得:

//RCAP2H,RCAP2L=65536-11059200/(32×波特率)

void init_UART()
{
	SCON=0x50; //串口工作方式1,8位UART,波特率可變  
    TH2=0xFF;           
    TL2=0xDC;   //波特率:9600 晶振=11.0592MHz 
    RCAP2H=0xFF;   
    RCAP2L=0xDC; //16位自動再裝入值 
//*****************
    TCLK=1;   
    RCLK=1;   
    C_T2=0;   
    EXEN2=0; //波特率發生器工作方式

//*****************
	ES=0;//關閉串口中斷
	EA=1;//開全局中斷
    TR2=1 ; //定時器2開始
}

void Read_Picture() interrupt 4 using 1
{
	uchar dat;
	if(RI)
	{
		dat=SBUF;
		RI=0;
		if(front==rear+1)//隊列已滿
		{
			ES=0;
			error=1;
		}
		if(bank)
		{
			Picture_Dat2[rear]=dat;
			bank=!bank;
			rear++;
		}
		else
		{
			Picture_Dat2[rear]=dat;
			bank=!bank;
			countr++;
			countr++;
		}			
	}
}

void Send_Cmd(uchar *cmd)
{
	uchar idata i;
	for(i=0;i<6;i++)
	{
		SBUF=cmd[i];
		while(TI==0)
			;
		TI=0;
		delay(1);
	}
}

void Wait_ACK(uchar *cmd)
{
	uchar idata i;
	for(i=0;i<6;i++)
	{
		while(RI==0)
			;
		cmd[i]=SBUF;
		RI=0;
	}
	//if(cmd[0]==0xAA&&cmd[1]>=0x01&&cmd[1]<=0x0F)
	//	return 1;
	//return 0;	
}

bit CAM_Cmd(uchar *cmd)
{
	uchar idata temp_cmd[6]; 
	Send_Cmd(cmd);
   	Wait_ACK(temp_cmd);
	if(temp_cmd[0]==0xAA&&temp_cmd[1]==0x0E&&temp_cmd[2]==cmd[1])
	{
		delay_ms(50);
		return 1;
	}
	return 0;
}

bit Send_SYNC_Cmd()
{
	uchar idata OldTH2,OldTL2;//保存原先的波特率
	uchar idata cmd1[6];
	uchar idata cmd2[6];
	uchar idata i,j,k;
	//*****************
	//將波特率調整為115200
	TR2=0 ; //定時器2停止
	OldTH2=RCAP2H;
	OldTL2=RCAP2L;
	TH2=0xFF;           
    TL2=0xFD;   //波特率:115200 晶振=11.0592MHz 
    RCAP2H=0xFF;   
    RCAP2L=0xFD; //16位自動再裝入值
   	TR2=1 ; //定時器2開始
	//*****************
	for(i=0;i<60;i++)
	{
		Send_Cmd(SYNC_ID);
		for(j=0;j<255;j++)
		{
			for(k=0;k<255;k++)
			{
				if(RI!=0)
				{
					Wait_ACK(cmd1);
					Wait_ACK(cmd2);
					break;
				}
			}
		}
		if(j==255&&k==255)//350ms內沒有獲得應答
			continue;
		if(cmd1[0]!=0xAA||cmd1[1]!=0x0E||cmd1[2]!=0x0D)
			continue;
		if(cmd2[0]!=0xAA||cmd2[1]!=0x0D)
			continue;
		Send_Cmd(ACK1_ID);
		delay_ms(50);
		break;
	}
	if(i==60)
		return 0;

	//將CAM的波特率設置為9600
	CAM_Cmd(BAUDRATE_ID);

	//*****************
	//恢復原先波特率9600
	TR2=0 ; //定時器2停止
	TH2=OldTH2;           
    TL2=OldTL2;
    RCAP2H=OldTH2;   
    RCAP2L=OldTL2; //16位自動再裝入值
   	TR2=1 ; //定時器2開始
	//*****************
	return 1;	
}

bit Get_Picture()
{
	uchar idata temp_cmd[6];
	uchar temp1,temp2,tempdat;
	uchar i;
	bank=0;
	error=0;
	countr=0;
	lcd_x=0;
	lcd_y=0;
	wr_lcd (0,0x34);//8-BIT 控制接口的擴充指令集動作 
	wr_lcd(0,0x80);	//設定GDRAM 地址到地址計數器
	wr_lcd(0,0x81); 
	Send_Cmd(GETPICTURE_ID);
   	Wait_ACK(temp_cmd);
	if(temp_cmd[2]==GETPICTURE_ID[1])
	{
		Wait_ACK(temp_cmd);
		ES=1;
		while(countr<1200&&(lcd_x<Width&&lcd_y<Height))
		{
			if(front!=rear)
			{
				temp1=Picture_Dat1[front];
				temp2=Picture_Dat2[front];
				front++;
				tempdat=0;
				for(i=0;i<4;i++)
				{
					tempdat<<=1;
					if(temp1&0x80)
						tempdat|=0x01;
					temp1<<=2;		
				}
				for(i=0;i<4;i++)
				{
					tempdat<<=1;
					if(temp2&0x80)
						tempdat|=0x01;
					temp2<<=2;		
				}
				wr_lcd(1,tempdat);
				lcd_x++;
				if(lcd_x==Width)//換行
				{
					lcd_y++;
					wr_lcd (0,0x34);//8-BIT 控制接口的擴充指令集動作 
					wr_lcd(0,0x80+lcd_y);	//設定GDRAM 地址到地址計數器
					wr_lcd(0,0x81);
					lcd_x=0;
				}	
			}
			else
			{
				if(error)
				{
					CAM_Cmd(RESET1_ID);
					wr_lcd (0,0x36);
					return 0;
				}
			}	
		}
		ES=0;
		if(countr<1200)
			CAM_Cmd(RESET1_ID);
		Send_Cmd(ACK2_ID);
		wr_lcd (0,0x36);
		delay_ms(50);
		return 1;		
	}
	return 0;
}

void main()
{
	init_lcd();
	init_UART();
	wr_lcd (0,0x30); 
  	wr_lcd (0,0x80);
	wr_lcd (1,'S');
	wr_lcd (1,'Y');
	wr_lcd (1,'N');
	wr_lcd (1,'C');
	wr_lcd (1,' ');
	if(Send_SYNC_Cmd())
	{
		wr_lcd (1,'O');
		wr_lcd (1,'K');
	}
	else
	{
		wr_lcd (1,'E');
		wr_lcd (1,'R');
		goto ERROR;
	}
	wr_lcd (0,0x30); 
  	wr_lcd (0,0x80);
	wr_lcd (1,'I');
	wr_lcd (1,'N');
	wr_lcd (1,'I');
	wr_lcd (1,'T');
	wr_lcd (1,' ');
	if(CAM_Cmd(INITAL_ID))
	{
		wr_lcd (1,'O');
		wr_lcd (1,'K');
	}
	else
	{
		wr_lcd (1,'E');
		wr_lcd (1,'R');
		goto ERROR;
	}
	while(1)
	{
		if(!key)
		{
			delay_ms(10);
			if(!key)
			{
				wr_lcd (0,0x30); 
  				wr_lcd (0,0x85);
				wr_lcd (1,'S');
				wr_lcd (1,'N');
				wr_lcd (1,'A');
				wr_lcd (1,'P');
				wr_lcd (1,' ');
				wr_lcd (0,0x30); 
  				wr_lcd (0,0x96);
				if(CAM_Cmd(SNAPSHOT_ID))
				{
					wr_lcd (1,'O');
					wr_lcd (1,'K');
				}
				else
				{
					wr_lcd (1,'E');
					wr_lcd (1,'R');
					goto ERROR;
				}
				Get_Picture();
				while(!key)
					;
			}
		}
	}
ERROR:;
	CAM_Cmd(RESET2_ID);
	while(1)
		;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人一区二区三区在线观看| 午夜视频在线观看一区二区| 欧美一区二区三区视频在线观看| 91黄色激情网站| 91色在线porny| 欧美亚洲一区二区三区四区| 欧美曰成人黄网| 欧美喷潮久久久xxxxx| 欧美日韩一二区| 欧美电视剧免费观看| 精品少妇一区二区| 日本一区二区免费在线观看视频| 国产午夜精品久久久久久久 | 99精品热视频| 色婷婷久久综合| 欧美三级韩国三级日本三斤 | 美女一区二区视频| 国产揄拍国内精品对白| 丁香一区二区三区| 91高清视频免费看| 欧美一区二区三区免费在线看 | 成人黄色免费短视频| 色婷婷久久久亚洲一区二区三区| 欧美亚洲国产一区在线观看网站 | 99热在这里有精品免费| 在线精品国精品国产尤物884a| 欧美裸体一区二区三区| 精品入口麻豆88视频| 欧美国产综合一区二区| 亚洲香肠在线观看| 久久av中文字幕片| 94色蜜桃网一区二区三区| 久久人人超碰精品| 国产精品系列在线| 亚洲成av人片www| 国产成人一区在线| 欧洲一区二区av| 国产亚洲一二三区| 亚洲国产精品一区二区久久| 紧缚奴在线一区二区三区| 91原创在线视频| 久久亚洲综合色一区二区三区| 亚洲摸摸操操av| 精品一区中文字幕| 在线观看亚洲精品| 欧美激情一区二区三区蜜桃视频 | 精品中文字幕一区二区| 99精品视频一区二区| 欧美成人精品高清在线播放| 一区二区三区欧美视频| 国产不卡高清在线观看视频| 538在线一区二区精品国产| 亚洲视频一区二区在线观看| 精品在线一区二区| 制服丝袜日韩国产| 一区二区成人在线视频| 成人av资源在线观看| 精品久久国产字幕高潮| 丝袜美腿成人在线| 一本色道久久综合亚洲精品按摩| 久久久久久久久久久黄色| 五月婷婷色综合| 欧美性猛交一区二区三区精品| 中文字幕在线不卡国产视频| 国产一区999| 久久午夜电影网| 经典一区二区三区| 精品成人佐山爱一区二区| 视频一区二区不卡| 欧美色倩网站大全免费| 亚洲欧美日韩国产手机在线| 北条麻妃一区二区三区| 中文字幕国产一区二区| 国产精品伊人色| 欧美经典一区二区三区| 国产精品一区二区久久不卡| 欧美精品一区二区三区在线播放 | heyzo一本久久综合| 中文无字幕一区二区三区| 国产不卡免费视频| 久久精品在这里| 国产91精品欧美| 18成人在线视频| 91丨九色丨国产丨porny| 综合在线观看色| 色婷婷国产精品综合在线观看| 中文字幕在线一区免费| 色婷婷av久久久久久久| 亚洲成人激情自拍| 日韩一卡二卡三卡国产欧美| 精品一区二区三区久久久| 久久精品一区二区三区av| 国产大陆精品国产| 亚洲天堂成人网| 777欧美精品| 国产精品一区二区视频| 中文字幕一区日韩精品欧美| 色婷婷综合久久久久中文| 日韩精品国产欧美| 久久蜜臀中文字幕| 91免费看视频| 麻豆久久久久久| 国产精品人成在线观看免费| 在线一区二区三区四区| 免费在线观看一区| 欧美经典一区二区三区| 欧美系列亚洲系列| 久久精品国产精品青草| 中文字幕一区二区三区乱码在线| 欧美亚洲国产一区二区三区va| 男人的天堂久久精品| 久久九九99视频| 欧美日韩亚洲综合一区| 国模无码大尺度一区二区三区| 亚洲婷婷在线视频| 日韩一区二区中文字幕| av不卡一区二区三区| 日韩在线观看一区二区| 成人欧美一区二区三区小说| 日韩一区二区免费电影| 91麻豆精品一区二区三区| 美女在线视频一区| 亚洲一区二区三区中文字幕在线| www国产精品av| 欧美区一区二区三区| 91在线观看污| 国产精品影视在线| 秋霞国产午夜精品免费视频| 国产精品国产a级| 久久综合色婷婷| 欧美精品自拍偷拍| 色婷婷久久久久swag精品| 国产伦精品一区二区三区免费| 亚洲国产中文字幕| 国产精品成人免费| 久久久精品国产免大香伊| 欧美一级黄色大片| 欧美日韩在线电影| 色系网站成人免费| 成人精品免费网站| 国产精品 欧美精品| 麻豆91精品91久久久的内涵| 午夜欧美在线一二页| 亚洲精品日韩综合观看成人91| 国产日韩欧美麻豆| 久久综合色一综合色88| 精品精品国产高清一毛片一天堂| 制服丝袜激情欧洲亚洲| 欧美日韩视频第一区| 欧美在线高清视频| 欧美羞羞免费网站| 欧洲av在线精品| 欧美丝袜丝nylons| 欧美日韩一区二区三区在线看 | 精品美女一区二区| 精品国免费一区二区三区| 日韩丝袜美女视频| 日韩一区二区免费在线观看| 日韩欧美中文字幕精品| 91精品国产综合久久香蕉麻豆| 欧美日韩一区不卡| 在线播放日韩导航| 精品少妇一区二区三区在线播放| 精品久久久久久久久久久久包黑料| 国产精品亲子伦对白| 亚洲精品国久久99热| 亚洲国产另类av| 久久99久久久久| 国产精品99久久久久久久vr | 欧美日韩国产三级| 欧美一级在线观看| 久久精品男人天堂av| 日本一区二区高清| 亚洲精品免费在线播放| 午夜精品福利一区二区蜜股av| 日精品一区二区三区| 国产在线视频一区二区三区| 国产91在线观看| 欧美亚洲一区三区| 日韩精品一区二区三区三区免费| 久久久久久夜精品精品免费| 国产精品毛片无遮挡高清| 亚洲午夜视频在线| 蜜桃久久久久久久| 不卡视频在线观看| 91精品国产麻豆国产自产在线 | 免费成人av资源网| 国产精品亚洲一区二区三区在线| av在线一区二区三区| 欧美美女视频在线观看| 国产精品少妇自拍| 天使萌一区二区三区免费观看| 国产乱子轮精品视频| 欧美日韩视频在线观看一区二区三区| 精品国产乱码久久久久久闺蜜| 亚洲日本一区二区| 国产一区二区三区观看| 欧美日韩一级二级三级| 国产精品免费av| 精品亚洲porn|