版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
附錄電路圖源代碼u16co;u8coshu[15];unsignedintcoyu=200;u8coyus[15];unsignedintyayu=150;u16ya;u8yas[15];u8yayus[15];intfragment=0;u8send[30];intbeepnum=0;intbiaozhi=0;intbiaozhi1=0;intbiaozhi2=0;intbiaozhi3=0;intbiaozhi4=0;intbiaozhi5=0;voidUSART1_Puts(char*str){while(*str){USART1->DR=*str++;while((USART1->SR&0X40)==0);}}voidUSART3_Puts(char*str){while(*str){USART3->DR=*str++;while((USART3->SR&0X40)==0);}}intmain(void){ inti,j; delay_init(); NVIC_Configuration(); OLED_Init(); OLED_ColorTurn(0);//0正常顯示,1反色顯示OLED_DisplayTurn(0);//0正常顯示1屏幕翻轉(zhuǎn)顯示 OLED_Refresh(); OLED_Clear(); KEY_Init(); LED_Init(); beep_Init(); beep=0; Adc_Init(); //ADC初始化 usart2_init(9600);usart3_init(9600); JDQ1=1; JDQ2=1;JDQ3=1;OLED_ShowChinese(0,0,0,16);// OLED_ShowChinese(18,0,1,16);// OLED_ShowString(36,0,":",16); OLED_ShowString(0,20,"CO:",16); OLED_ShowChinese(0,40,2,16);//系 OLED_ShowChinese(18,40,3,16);//統(tǒng) OLED_ShowString(36,40,":",16); OLED_Refresh();LED1=0;LED2=0;LED3=0; KEY_Init(); yayus[0]=yayu/100+'0'; yayus[1]=yayu%100/10+'0'; yayus[2]=yayu%10+'0'; yayus[3]=0; OLED_ShowString(95,0,yayus,16); coshu[0]=coyu/100+'0'; coshu[1]=coyu%100/10+'0'; coshu[2]=coyu%10+'0'; coshu[3]=0; OLED_ShowString(95,20,coshu,16); OLED_Refresh(); while(1) { if(USART3_RX_STA==1){ USART3_RX_STA=0; if(USART3_TX_BUF[0]=='w'){ if(USART3_TX_BUF[1]=='1'){ coyu=(USART3_TX_BUF[2]-'0')*100+(USART3_TX_BUF[3]-'0')*10+USART3_TX_BUF[4]-'0'; yayu=(USART3_TX_BUF[5]-'0')*100+(USART3_TX_BUF[6]-'0')*10+USART3_TX_BUF[7]-'0'; yayus[0]=yayu/100+'0'; yayus[1]=yayu%100/10+'0'; yayus[2]=yayu%10+'0'; yayus[3]=0; OLED_ShowString(95,0,yayus,16); coshu[0]=coyu/100+'0'; coshu[1]=coyu%100/10+'0'; coshu[2]=coyu%10+'0'; coshu[3]=0; OLED_ShowString(95,20,coshu,16); } } } ya=Get_Adc_Average(ADC_Channel_1,10); co=Get_Adc_Average(ADC_Channel_0,10)/10; coshu[0]=co/1000+'0'; coshu[1]=co%1000/100+'0'; coshu[2]=co%100/10+'0'; coshu[3]=co%10+'0'; OLED_ShowString(54,20,coshu,16); yas[0]=ya/1000+'0'; yas[1]=ya%1000/100+'0'; yas[2]=ya%100/10+'0'; yas[3]=ya%10+'0'; OLED_ShowString(54,0,yas,16); OLED_Refresh(); if(HW==0){ biaozhi3=1;JDQ3=0; OLED_ShowChinese(60,40,4,16);//系 OLED_ShowChinese(78,40,5,16);//統(tǒng) OLED_Refresh(); }else{ biaozhi3=0;JDQ3=1; OLED_ShowChinese(60,40,6,16);//系 OLED_ShowChinese(78,40,7,16);//統(tǒng) OLED_Refresh(); } if(ya>yayu){ biaozhi1=1;JDQ1=0; }else{ biaozhi1=0; } if(co>coyu){ biaozhi2=1;JDQ1=0; }else{ biaozhi2=0; } if(co<coyu&&ya<yayu){ JDQ1=1; } if(biaozhi1==1||biaozhi2==1||biaozhi3==1){ beep=0; delay_ms(500); }else{ delay_ms(500); beep=1; } send[0]='w';send[1]='1'; send[2]=co/1000+'0'; send[3]=co%1000/100+'0'; send[4]=co%100/10+'0'; send[5]=co%10+'0'; send[6]=ya/1000+'0'; send[7]=ya%1000/100+'0'; send[8]=ya%100/10+'0'; send[9]=ya%10+'0'; send[10]=biaozhi1%10+'0'; send[11]=biaozhi2%10+'0'; send[12]=biaozhi3%10+'0'; send[13]='z'; send[14]=0; USART3_Puts(send); if(KEY2==1){ } }}#include"key.h"voidKEY_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOB,ENABLE);//使能PORTA,PORTC時(shí)鐘 GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);//關(guān)閉jtag,使能SWD,可以用SWD模式調(diào)試 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6;//PA0 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//PA0設(shè)置成輸入,默認(rèn)下? GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz; //IO口速度為50MHz GPIO_Init(GPIOB,&GPIO_InitStructure);//初始化GPIOA.0 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_11;//PC5 GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;//設(shè)置成上拉輸入 GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化GPIOC5 }#include"oled.h"#include"stdlib.h"#include"oledfont.h" #include"delay.h"u8OLED_GRAM[144][8];//反顯函數(shù)voidOLED_ColorTurn(u8i){ if(i==0) { OLED_WR_Byte(0xA6,OLED_CMD);//正常顯示 } if(i==1) { OLED_WR_Byte(0xA7,OLED_CMD);//反色顯示 }}//屏幕旋轉(zhuǎn)180度voidOLED_DisplayTurn(u8i){ if(i==0) { OLED_WR_Byte(0xC8,OLED_CMD);//正常顯示 OLED_WR_Byte(0xA1,OLED_CMD); } if(i==1) { OLED_WR_Byte(0xC0,OLED_CMD);//反轉(zhuǎn)顯示 OLED_WR_Byte(0xA0,OLED_CMD); }}//起始信號voidI2C_Start(void){ OLED_SDIN_Set(); OLED_SCLK_Set(); OLED_SDIN_Clr(); OLED_SCLK_Clr();}//結(jié)束信號voidI2C_Stop(void){ OLED_SCLK_Set(); OLED_SDIN_Clr(); OLED_SDIN_Set();}//等待信號響應(yīng)voidI2C_WaitAck(void)//測數(shù)據(jù)信號的電平{ OLED_SCLK_Set(); OLED_SCLK_Clr();}//寫入一個(gè)字節(jié)voidSend_Byte(u8dat){ u8i; for(i=0;i<8;i++) { OLED_SCLK_Clr();//將時(shí)鐘信號設(shè)置為低電平 if(dat&0x80)//將dat的8位從最高位依次寫入 { OLED_SDIN_Set();} else { OLED_SDIN_Clr();} OLED_SCLK_Set();//將時(shí)鐘信號設(shè)置為高電平 OLED_SCLK_Clr();//將時(shí)鐘信號設(shè)置為低電平 dat<<=1;}}//發(fā)送一個(gè)字節(jié)//向SSD1306寫入一個(gè)字節(jié)。//mode:數(shù)據(jù)/命令標(biāo)志0,表示命令;1,表示數(shù)據(jù);voidOLED_WR_Byte(u8dat,u8mode){ I2C_Start(); Send_Byte(0x78); I2C_WaitAck(); if(mode){Send_Byte(0x40);}else{Send_Byte(0x00);} I2C_WaitAck(); Send_Byte(dat); I2C_WaitAck(); I2C_Stop();}//開啟OLED顯示voidOLED_DisPlay_On(void){ OLED_WR_Byte(0x8D,OLED_CMD);//電荷泵使能 OLED_WR_Byte(0x14,OLED_CMD);//開啟電荷泵 OLED_WR_Byte(0xAF,OLED_CMD);//點(diǎn)亮屏幕}//關(guān)閉OLED顯示voidOLED_DisPlay_Off(void){ OLED_WR_Byte(0x8D,OLED_CMD);//電荷泵使能 OLED_WR_Byte(0x10,OLED_CMD);//關(guān)閉電荷泵 OLED_WR_Byte(0xAF,OLED_CMD);//關(guān)閉屏幕}//更新顯存到OLED voidOLED_Refresh(void){ u8i,n; for(i=0;i<8;i++) { OLED_WR_Byte(0xb0+i,OLED_CMD);//設(shè)置行起始地址 OLED_WR_Byte(0x00,OLED_CMD);//設(shè)置低列起始地址 OLED_WR_Byte(0x10,OLED_CMD);//設(shè)置高列起始地址 for(n=0;n<128;n++) OLED_WR_Byte(OLED_GRAM[n][i],OLED_DATA);}}//清屏函數(shù)voidOLED_Clear(void){ u8i,n; for(i=0;i<8;i++) { for(n=0;n<128;n++) { OLED_GRAM[n][i]=0;//清除所有數(shù)據(jù) }} OLED_Refresh();//更新顯示}//畫點(diǎn)//x:0~127//y:0~63voidOLED_DrawPoint(u8x,u8y){ u8i,m,n; i=y/8; m=y%8; n=1<<m; OLED_GRAM[x][i]|=n;}//清除一個(gè)點(diǎn)//x:0~127//y:0~63voidOLED_ClearPoint(u8x,u8y){ u8i,m,n; i=y/8; m=y%8; n=1<<m; OLED_GRAM[x][i]=~OLED_GRAM[x][i]; OLED_GRAM[x][i]|=n; OLED_GRAM[x][i]=~OLED_GRAM[x][i];}//畫線//x:0~128//y:0~64voidOLED_DrawLine(u8x1,u8y1,u8x2,u8y2){ u8i,k,k1,k2; if((x1<0)||(x2>128)||(y1<0)||(y2>64)||(x1>x2)||(y1>y2))return; if(x1==x2)//畫豎線 { for(i=0;i<(y2-y1);i++) { OLED_DrawPoint(x1,y1+i); }} elseif(y1==y2)//畫橫線 { for(i=0;i<(x2-x1);i++) { OLED_DrawPoint(x1+i,y1); }} else//畫斜線 { k1=y2-y1; k2=x2-x1; k=k1*10/k2; for(i=0;i<(x2-x1);i++) { OLED_DrawPoint(x1+i,y1+i*k/10); } }}//x,y:圓心坐標(biāo)//r:圓的半徑voidOLED_DrawCircle(u8x,u8y,u8r){ inta,b,num;a=0;b=r;while(2*b*b>=r*r){OLED_DrawPoint(x+a,y-b);OLED_DrawPoint(x-a,y-b);OLED_DrawPoint(x-a,y+b);OLED_DrawPoint(x+a,y+b);OLED_DrawPoint(x+b,y+a);OLED_DrawPoint(x+b,y-a);OLED_DrawPoint(x-b,y-a);OLED_DrawPoint(x-b,y+a);a++;num=(a*a+b*b)-r*r;//計(jì)算畫的點(diǎn)離圓心的距離if(num>0){b--;a--;}}}//在指定位置顯示一個(gè)字符,包括部分字符//x:0~127//y:0~63//size:選擇字體12/16/24voidOLED_ShowChar(u8x,u8y,u8chr,u8size1){ u8i,m,temp,size2,chr1; u8y0=y; size2=(size1/8+((size1%8)?1:0))*(size1/2);//得到字體一個(gè)字符對應(yīng)點(diǎn)陣集所占的字節(jié)數(shù) chr1=chr-'';//計(jì)算偏移后的值 for(i=0;i<size2;i++) { if(size1==12){temp=asc2_1206[chr1][i];}//調(diào)用1206字體 elseif(size1==16){temp=asc2_1608[chr1][i];}//調(diào)用1608字體 elseif(size1==24){temp=asc2_2412[chr1][i];}//調(diào)用2412字體 elsereturn; for(m=0;m<8;m++)//寫入數(shù)據(jù) { if(temp&0x80)OLED_DrawPoint(x,y); elseOLED_ClearPoint(x,y); temp<<=1; y++; if((y-y0)==size1) { y=y0; x++; break;} }}}//顯示字符串//x,y:起點(diǎn)坐標(biāo)//size1:字體大小//*chr:字符串起始地址voidOLED_ShowString(u8x,u8y,u8*chr,u8size1){ while((*chr>='')&&(*chr<='~'))//判斷是不是非法字符! { OLED_ShowChar(x,y,*chr,size1); x+=size1/2; if(x>128-size1)//換行 { x=0; y+=2;} chr++;}}//m^nu32OLED_Pow(u8m,u8n){ u32result=1; while(n--) { result*=m; } returnresult;}////顯示2個(gè)數(shù)字////x,y:起點(diǎn)坐標(biāo) ////len:數(shù)字的位數(shù)////size:字體大小voidOLED_ShowNum(u8x,u8y,u32num,u8len,u8size1){ u8t,temp; for(t=0;t<len;t++) { temp=(num/OLED_Pow(10,len-t-1))%10; if(temp==0) { OLED_ShowChar(x+(size1/2)*t,y,'0',size1);} else { OLED_ShowChar(x+(size1/2)*t,y,temp+'0',size1); }}}//顯示漢字//x,y:起點(diǎn)坐標(biāo)//num:漢字對應(yīng)的序號voidOLED_ShowChinese(u8x,u8y,u8num,u8size1){ u8i,m,n=0,temp,chr1; u8x0=x,y0=y; u8size3=size1/8; while(size3--) { chr1=num*size1/8+n; n++; for(i=0;i<size1;i++) { if(size1==16) {temp=Hzk1[chr1][i];}//調(diào)用16*16字體 elseif(size1==24) {temp=Hzk2[chr1][i];}//調(diào)用24*24字體 elseif(size1==32) {temp=Hzk3[chr1][i];}//調(diào)用32*32字體 elseif(size1==64) {temp=Hzk4[chr1][i];}//調(diào)用64*64字體 elsereturn; for(m=0;m<8;m++) { if(temp&0x01)OLED_DrawPoint(x,y); elseOLED_ClearPoint(x,y); temp>>=1; y++; } x++; if((x-x0)==size1) {x=x0;y0=y0+8;} y=y0; } }}//num顯示漢字的個(gè)數(shù)//space每一遍顯示的間隔voidOLED_ScrollDisplay(u8num,u8space){ u8i,n,t=0,m=0,r; while(1) { if(m==0) { OLED_ShowChinese(128,24,t,16);//寫入一個(gè)漢字保存在OLED_GRAM[][]數(shù)組中 t++; } if(t==num) { for(r=0;r<16*space;r++)//顯示間隔 { for(i=0;i<144;i++) { for(n=0;n<8;n++) { OLED_GRAM[i-1][n]=OLED_GRAM[i][n]; } }OLED_Refresh(); }t=0;} m++; if(m==16){m=0;} for(i=0;i<144;i++)//實(shí)現(xiàn)左移 { for(n=0;n<8;n++) { OLED_GRAM[i-1][n]=OLED_GRAM[i][n]; } } OLED_Refresh(); }}//配置寫入數(shù)據(jù)的起始位置voidOLED_WR_BP(u8x,u8y){ OLED_WR_Byte(0xb0+y,OLED_CMD);//設(shè)置行起始地址 OLED_WR_Byte(((x&0xf0)>>4)|0x10,OLED_CMD); OLED_WR_Byte((x&0x0f)|0x01,OLED_CMD);}//x0,y0:起點(diǎn)坐標(biāo)//x1,y1:終點(diǎn)坐標(biāo)//BMP[]:要寫入的圖片數(shù)組voidOLED_ShowPicture(u8x0,u8y0,u8x1,u8y1,u8BMP[]){ u32j=0; u8x=0,y=0; if(y%8==0)y=0; elsey+=1; for(y=y0;y<y1;y++) { OLED_WR_BP(x0,y); for(x=x0;x<x1;x++) { OLED_WR_Byte(BMP[j],OLED_DATA); j++;} }}//OLED的初始化voidOLED_Init(void){ GPIO_InitTypeDefGPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); //使能A端口時(shí)鐘 GPIO_InitStructure.GPIO_Pin=GPIO_Pin_13|GPIO_Pin_15; GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP; //推挽輸出 GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;//速度50MHz GPIO_Init(GPIOC,&GPIO_InitStructure); GPIO_SetBits(GPIOC,GPIO_Pin_13|GPIO_Pin_15); OLED_WR_Byte(0xAE,OLED_CMD);//--turnoffoledpanel OLED_WR_Byte(0x00,OLED_CMD);//setlowcolumnaddress OLED_WR_Byte(0x10,OLED_CMD);//sethighcolumnaddress OLED_WR_Byte(0x40,OLED_CMD);//--setstartlineaddressSetMappingRAMDisplayStartLine(0x00~0x3F) OLED_WR_Byte(0x81,OLED_CMD);//--setcontrastcontrolregister OLED_WR_Byte(0xCF,OLED_CMD);//SetSEGOutputCurrentBrightness OLED_WR_Byte(0xA1,OLED_CMD);//--SetSEG/ColumnMapping0xa0左右反置0xa1正常 OLED_WR_Byte(0xC8,OLED_CM
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 嬰幼兒早期教育服務(wù)質(zhì)量研究-洞察分析
- 小微企業(yè)網(wǎng)絡(luò)營銷效果評估-洞察分析
- 藥品價(jià)格與社會(huì)保險(xiǎn)聯(lián)動(dòng)-洞察分析
- 稀疏概率圖學(xué)習(xí)-洞察分析
- 心理彈性培養(yǎng)在教育中的實(shí)踐-洞察分析
- 舞蹈藝術(shù)中的身體審美觀念變遷-洞察分析
- 藝術(shù)社區(qū)發(fā)展評價(jià)體系-洞察分析
- 虛擬化技術(shù)安全挑戰(zhàn)-洞察分析
- 投資咨詢行業(yè)國際化挑戰(zhàn)-洞察分析
- 現(xiàn)代藝術(shù)與生態(tài)材料應(yīng)用-洞察分析
- 廣東省東莞市2022-2023學(xué)年高一上學(xué)期期末化學(xué)試題(含答案)
- 汽車租賃服務(wù)投標(biāo)方案
- 柴油存放告知書范本
- 兵團(tuán)遴選考試題目及參考答案
- 食材配送服務(wù)方案(技術(shù)方案)
- 處方點(diǎn)評工作表
- 消防控制室值班記錄(制式表格)
- 2023-2024學(xué)年四川省廣元市市中區(qū)六年級數(shù)學(xué)第一學(xué)期期末檢測模擬試題含答案
- 價(jià)值流PSI拉動(dòng)暢流
- 文明施工管理體系及實(shí)施措施
- 課程教學(xué)目標(biāo)達(dá)成度評價(jià)表
評論
0/150
提交評論