亚洲春色中文字幕久久久-三上亚,一吻二脱三床四吻胸,国产真实伦对白视频全集,在线毛片观看,精品成品入口黄网,国产毛aⅴ片久久久,亚洲AV色香蕉一区二区三区老师,萧皇后A级艳片,色情日本视频更新,99久久亚洲精品日本无码
標(biāo)題:
自制stm32小游戲,類似打地鼠
[打印本頁]
作者:
myhl
時(shí)間:
2017-8-6 11:07
標(biāo)題:
自制stm32小游戲,類似打地鼠
寫了不到一天時(shí)間,就自己瞎玩一玩,大家看看,哈哈哈
所有資料51hei提供下載:
實(shí)驗(yàn)40 踩百塊哈哈哈.rar
(1.21 MB, 下載次數(shù): 137)
2017-8-6 17:18 上傳
點(diǎn)擊文件名下載附件
觸摸,打地鼠
下載積分: 黑幣 -5
stm32單片機(jī)源程序如下:
#include "sys.h"
#include "delay.h"
#include "usart.h"
#include "led.h"
#include "lcd.h"
#include "key.h"
#include "sram.h"
#include "malloc.h"
#include "usmart.h"
#include "sdio_sdcard.h"
#include "malloc.h"
#include "w25qxx.h"
#include "ff.h"
#include "timer.h"
#include "exfuns.h"
#include "fontupd.h"
#include "text.h"
#include "rng.h"
#include "touch.h"
#include "rtc.h"
//ALIENTEK 探索者STM32F407開發(fā)板 實(shí)驗(yàn)40
//漢字顯示 實(shí)驗(yàn) -庫函數(shù)版本
//清空屏幕并在右上角顯示"RST" t
u32 qwer;
u32 random=300;
u32 dom=300;
u32 miao;
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中斷
{
miao++;
LCD_ShowNum(30+3*16,170,miao,5,16); //shijian
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中斷標(biāo)志位
}
void Load_Drow_Dialog(void)
{
// LCD_Clear(WHITE);//清屏
POINT_COLOR=BLUE;//設(shè)置字體為藍(lán)色
LCD_ShowString(lcddev.width-24,0,200,16,16,"RST");//顯示清屏區(qū)域
POINT_COLOR=RED;//設(shè)置畫筆藍(lán)色
}
////////////////////////////////////////////////////////////////////////////////
//電容觸摸屏專有部分
//畫水平線
//x0,y0:坐標(biāo)
//len:線長度
//color:顏色
void gui_draw_hline(u16 x0,u16 y0,u16 len,u16 color)
{
if(len==0)return;
LCD_Fill(x0,y0,x0+len-1,y0,color);
}
//畫實(shí)心圓
//x0,y0:坐標(biāo)
//r:半徑
//color:顏色
void gui_fill_circle(u16 x0,u16 y0,u16 r,u16 color)
{
u32 i;
u32 imax = ((u32)r*707)/1000+1;
u32 sqmax = (u32)r*(u32)r+(u32)r/2;
u32 x=r;
gui_draw_hline(x0-r,y0,2*r,color);
for (i=1;i<=imax;i++)
{
if ((i*i+x*x)>sqmax)// draw lines from outside
{
if (x>imax)
{
gui_draw_hline (x0-i+1,y0+x,2*(i-1),color);
gui_draw_hline (x0-i+1,y0-x,2*(i-1),color);
}
x--;
}
// draw lines from inside (center)
gui_draw_hline(x0-x,y0+i,2*x,color);
gui_draw_hline(x0-x,y0-i,2*x,color);
}
}
//兩個(gè)數(shù)之差的絕對(duì)值
//x1,x2:需取差值的兩個(gè)數(shù)
//返回值:|x1-x2|
u16 my_abs(u16 x1,u16 x2)
{
if(x1>x2)return x1-x2;
else return x2-x1;
}
//畫一條粗線
//(x1,y1),(x2,y2):線條的起始坐標(biāo)
//size:線條的粗細(xì)程度
//color:線條的顏色
void lcd_draw_bline(u16 x1, u16 y1, u16 x2, u16 y2,u8 size,u16 color)
{
u16 t;
int xerr=0,yerr=0,delta_x,delta_y,distance;
int incx,incy,uRow,uCol;
if(x1<size|| x2<size||y1<size|| y2<size)return;
delta_x=x2-x1; //計(jì)算坐標(biāo)增量
delta_y=y2-y1;
uRow=x1;
uCol=y1;
if(delta_x>0)incx=1; //設(shè)置單步方向
else if(delta_x==0)incx=0;//垂直線
else {incx=-1;delta_x=-delta_x;}
if(delta_y>0)incy=1;
else if(delta_y==0)incy=0;//水平線
else{incy=-1;delta_y=-delta_y;}
if( delta_x>delta_y)distance=delta_x; //選取基本增量坐標(biāo)軸
else distance=delta_y;
for(t=0;t<=distance+1;t++ )//畫線輸出
{
gui_fill_circle(uRow,uCol,size,color);//畫點(diǎn)
xerr+=delta_x ;
yerr+=delta_y ;
if(xerr>distance)
{
xerr-=distance;
uRow+=incx;
}
if(yerr>distance)
{
yerr-=distance;
uCol+=incy;
}
}
}
////////////////////////////////////////////////////////////////////////////////
//5個(gè)觸控點(diǎn)的顏色(電容觸摸屏用)
const u16 POINT_COLOR_TBL[OTT_MAX_TOUCH]={RED,GREEN,BLUE,BROWN,GRED};
////電阻觸摸屏測(cè)試函數(shù)
void rtp_test(void)
{
u8 key;
u8 i=0;
while(1)
{
key=KEY_Scan(0);
tp_dev.scan(0);
if(tp_dev.sta&TP_PRES_DOWN) //觸摸屏被按下
{
if(tp_dev.x[0]<lcddev.width&&tp_dev.y[0]<lcddev.height)
{
if(tp_dev.x[0]>(lcddev.width-24)&&tp_dev.y[0]<16)Load_Drow_Dialog();//清除
else TP_Draw_Big_Point(tp_dev.x[0],tp_dev.y[0],RED); //畫圖
}
}else delay_ms(10); //沒有按鍵按下的時(shí)候
if(key==KEY0_PRES) //KEY0按下,則執(zhí)行校準(zhǔn)程序
{
LCD_Clear(WHITE); //清屏
TP_Adjust(); //屏幕校準(zhǔn)
TP_Save_Adjdata();
Load_Drow_Dialog();
}
i++;
// if(i%20==0)LED0=!LED0;
}
}
//電容觸摸屏測(cè)試函數(shù)
void ctp_test(void)
{
u8 t=0;
u8 i=0;
u16 lastpos[5][2]; //最后一次的數(shù)據(jù)
while(1)
{
tp_dev.scan(0);
for(t=0;t<OTT_MAX_TOUCH;t++)
{
if((tp_dev.sta)&(1<<t))
{
if(tp_dev.x[t]<lcddev.width&&tp_dev.y[t]<lcddev.height)
{
if(lastpos[t][0]==0XFFFF)
{
lastpos[t][0] = tp_dev.x[t];
lastpos[t][1] = tp_dev.y[t];
}
lcd_draw_bline(lastpos[t][0],lastpos[t][1],tp_dev.x[t],tp_dev.y[t],2,POINT_COLOR_TBL[t]);//畫線
lastpos[t][0]=tp_dev.x[t];
lastpos[t][1]=tp_dev.y[t];
if(tp_dev.x[t]>random&&tp_dev.x[t]<random+30&&tp_dev.y[t]>dom&&tp_dev.y[t]<dom+30) //水平方向,可以來進(jìn)行類似的按鍵檢測(cè)
{
random=RNG_Get_RandomRange(35,365);//獲取[0,9]區(qū)間的隨機(jī)數(shù) x
dom=RNG_Get_RandomRange(235,665);//獲取[0,9]區(qū)間的隨機(jī)數(shù) y
delay_ms(10);
Load_Drow_Dialog();//清除
delay_ms(10);
LCD_Fill(33,233,400,700,WHITE);
LED1=!LED1;
LCD_Fill(random,dom,random+30,dom+30,BLUE);
qwer=qwer+17;
LCD_ShowNum(30+5*16,150,qwer,5,16); //顯示隨機(jī)數(shù)
if(qwer>1000)
{
Show_Str(30,210,200,16,"您是MVP:",16,0);
Show_Str(30,210,200,16,"您是MVP:",16,0);
}
}
}
}else lastpos[t][0]=0XFFFF;
}
delay_ms(5);i++;
//if(i%20==0)LED0=!LED0;
}
}
void retc()
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
u8 x;
u8 tbuf[40];
x++;
if((x%10)==0) //每100ms更新一次顯示數(shù)據(jù) RTC_TimeStruct.RTC_Hours
{
RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
sprintf((char*)tbuf,"Time:%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
LCD_ShowString(30,140,210,16,16,tbuf);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
sprintf((char*)tbuf,"Date:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
LCD_ShowString(30,160,210,16,16,tbuf);
sprintf((char*)tbuf,"Week:%d",RTC_DateStruct.RTC_WeekDay);
LCD_ShowString(30,180,210,16,16,tbuf);
}
}
void jiemian()
{
LCD_Fill(33,33,333,400,GREEN);
LCD_Fill(533,33,750,400,BLUE);
}
int main(void)
{
RTC_TimeTypeDef RTC_TimeStruct;
RTC_DateTypeDef RTC_DateStruct;
u8 x;
u8 tbuf[40];
u32 fontcnt;
u8 i,j;
u8 t;
u8 fontx[2];//gbk碼
u32 miao=0;
u8 key;//t;
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設(shè)置系統(tǒng)中斷優(yōu)先級(jí)分組2
delay_init(168); //初始化延時(shí)函數(shù)
uart_init(9600); //初始化串口波特率為115200
LED_Init(); //初始化LED
LCD_Init(); //LCD初始化
KEY_Init(); //按鍵初始化
RNG_Init();
//My_RTC_Init(); //初始化RTC
tp_dev.init(); //觸摸屏初始化
TIM3_Int_Init(10000-1,8400-1); //定時(shí)器時(shí)鐘84M,分頻系數(shù)8400,所以84M/8400=10Khz的計(jì)數(shù)頻率,計(jì)數(shù)5000次為500ms
W25QXX_Init(); //初始化W25Q128
usmart_dev.init(84); //初始化USMART
my_mem_init(SRAMIN); //初始化內(nèi)部?jī)?nèi)存池
my_mem_init(SRAMCCM); //初始化CCM內(nèi)存池
exfuns_init(); //為fatfs相關(guān)變量申請(qǐng)內(nèi)存
f_mount(fs[0],"0:",1); //掛載SD卡
f_mount(fs[1],"1:",1); //掛載FLASH.
//RTC_Set_WakeUp(RTC_WakeUpClock_CK_SPRE_16bits,0); //配置WAKE UP中斷,1秒鐘中斷一次
while(font_init()) //檢查字庫
{
UPD:
LCD_Clear(WHITE); //清屏
POINT_COLOR=RED; //設(shè)置字體為紅色
LCD_ShowString(30,50,200,16,16,"Explorer STM32F4");
// while(SD_Init()) //檢測(cè)SD卡
// {
// LCD_ShowString(30,70,200,16,16,"SD Card Failed!");
// delay_ms(200);
// LCD_Fill(30,70,200+30,70+16,WHITE);
// delay_ms(200);
// }
LCD_ShowString(30,70,200,16,16,"SD Card OK");
LCD_ShowString(30,90,200,16,16,"Font Updating...");
key=update_font(20,110,16,"0:");//更新字庫
while(key)//更新失敗
{
LCD_ShowString(30,110,200,16,16,"Font Update Failed!");
delay_ms(200);
LCD_Fill(20,110,200+20,110+16,WHITE);
delay_ms(200);
}
LCD_ShowString(30,110,200,16,16,"Font Update Success! ");
delay_ms(1500);
LCD_Clear(WHITE);//清屏
}
POINT_COLOR=RED;
jiemian();
if(tp_dev.touchtype!=0XFF)LCD_ShowString(30,130,200,16,16,"Press KEY0 to Adjust");//電阻屏才顯示
delay_ms(1500);
Load_Drow_Dialog();
LCD_Fill(random,dom,random+30,dom+30,BLUE);
if(tp_dev.touchtype&0X80)ctp_test();//電容屏測(cè)試
else rtp_test(); //電阻屏測(cè)試
while(1)
{
fontcnt=0;
//retc();
Show_Str(30,210,200,16,"您是MVP:",16,0);
x++;
if((x%10)==0) //每100ms更新一次顯示數(shù)據(jù) RTC_TimeStruct.RTC_Hours
{
RTC_GetTime(RTC_Format_BIN,&RTC_TimeStruct);
sprintf((char*)tbuf,":%02d:%02d:%02d",RTC_TimeStruct.RTC_Hours,RTC_TimeStruct.RTC_Minutes,RTC_TimeStruct.RTC_Seconds);
LCD_ShowString(530,140,210,24,24,tbuf);
RTC_GetDate(RTC_Format_BIN, &RTC_DateStruct);
sprintf((char*)tbuf,"日期:20%02d-%02d-%02d",RTC_DateStruct.RTC_Year,RTC_DateStruct.RTC_Month,RTC_DateStruct.RTC_Date);
LCD_ShowString(530,180,210,24,24,tbuf);
sprintf((char*)tbuf,"Week:%d",RTC_DateStruct.RTC_WeekDay);
LCD_ShowString(530,220,210,24,24,tbuf);
}
for(i=0x81;i<0xff;i++)
{
fontx[0]=i;
// LCD_ShowNum(118,150,i,3,16); //顯示內(nèi)碼高字節(jié)
for(j=0x40;j<0xfe;j++)
{
if(j==0x7f)continue;
fontcnt++;
// LCD_ShowNum(118,170,j,3,16); //顯示內(nèi)碼低字節(jié)
// LCD_ShowNum(118,190,fontcnt,5,16);//漢字計(jì)數(shù)顯示
fontx[1]=j;
// Show_Font(30+132,220,fontx,24,0);
// Show_Font(30+144,244,fontx,16,0);
// Show_Font(30+108,260,fontx,12,0);
// t=200;
//
//
//
// while(t--)//延時(shí),同時(shí)掃描按鍵
// {
// delay_ms(1);
// key=KEY_Scan(0);
// if(key==KEY0_PRES)goto UPD;
// }
// // LED0=!LED0;
}
}
}
}
復(fù)制代碼
作者:
myhl
時(shí)間:
2017-8-6 15:54
沒人喵
作者:
木哇哇
時(shí)間:
2018-11-5 23:22
頂一個(gè)
作者:
NW心弦獨(dú)奏
時(shí)間:
2018-11-6 09:01
好東西,必須頂起來
作者:
aslkdfjhg
時(shí)間:
2018-11-6 22:32
好東西,頂上去
作者:
LIUZONGX
時(shí)間:
2018-12-12 11:22
......好東西,但是突然發(fā)現(xiàn)還有1-20行的庫我沒有....
完全沒辦法跑
作者:
dadaewqq
時(shí)間:
2020-6-7 23:56
來試試
作者:
HWL0541
時(shí)間:
2020-6-8 09:51
這個(gè)真好,準(zhǔn)備買個(gè)407
作者:
dzhdd
時(shí)間:
2020-7-8 20:55
有仿真圖嗎
歡迎光臨 (http://www.denmoz.com/bbs/)
Powered by Discuz! X3.1