久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2184|回復: 2
收起左側

STM32手寫識別程序

[復制鏈接]
ID:512851 發表于 2019-4-15 17:09 | 顯示全部樓層 |閱讀模式
#include "exfuns.h"   
#include "text.h"
#include "atk_ncr.h"
#include "touch.h"  

//最大記錄的軌跡點數
atk_ncr_point READ_BUF[200];      
//畫水平線
//x0,y0:坐標
//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);
}
//畫實心圓
//x0,y0:坐標
//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);
}
}  
//兩個數之差的絕對值
//x1,x2:需取差值的兩個數
//返回值:|x1-x2|
u16 my_abs(u16 x1,u16 x2)
{   
if(x1>x2)return x1-x2;
else return x2-x1;
}  
//畫一條粗線
//(x1,y1),(x2,y2):線條的起始坐標
//size:線條的粗細程度
//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; //計算坐標增量
delta_y=y2-y1;
uRow=x1;
uCol=y1;
if(delta_x>0)incx=1; //設置單步方向
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; //選取基本增量坐標軸
else distance=delta_y;
for(t=0;t<=distance+1;t++ )//畫線輸出
{  
  gui_fill_circle(uRow,uCol,size,color);//畫點
  xerr+=delta_x ;
  yerr+=delta_y ;
  if(xerr>distance)
  {
   xerr-=distance;
   uRow+=incx;
  }
  if(yerr>distance)
  {
   yerr-=distance;
   uCol+=incy;
  }
}  
}
int main(void)
{  
  u8 i=0;      
u8 tcnt=0;   
u8 res[10];
u8 key;      
u16 pcnt=0;
u8 mode=4;     //默認是混合模式         
  u16 lastpos[2];    //最后一次的數據
  
delay_init();       //延時函數初始化   
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//設置中斷優先級分組為組2:2位搶占優先級,2位響應優先級
uart_init(115200);   //串口初始化為115200
  LED_Init();       //初始化與LED連接的硬件接口
KEY_Init();     //初始化按鍵
LCD_Init();        //初始化LCD     
W25QXX_Init();    //初始化W25Q128
tp_dev.init();    //初始化觸摸屏
  my_mem_init(SRAMIN);  //初始化內部內存池
exfuns_init();    //為fatfs相關變量申請內存  
  f_mount(fs[0],"0:",1);   //掛載SD卡
  f_mount(fs[1],"1:",1);   //掛載FLASH.
alientek_ncr_init();  //初始化手寫識別
POINT_COLOR=RED;      
  while(font_init())    //檢查字庫
{     
  LCD_ShowString(30,50,200,16,16,"Font Error!");
  delay_ms(200);      
  LCD_Fill(30,50,240,66,WHITE);//清除顯示      
}
RESTART:
Show_Str(30,10,200,16,"戰艦 STM32開發板",16,0);         
Show_Str(30,30,200,16,"手寫識別實驗",16,0);         
Show_Str(30,50,200,16,"正點原子@ALIENTEK",16,0);         
Show_Str(30,70,200,16,"KEY0:MODE KEY_UP:Adjust",16,0);      
Show_Str(30,90,200,16,"識別結果:",16,0);  
LCD_DrawRectangle(19,114,lcddev.width-20,lcddev.height-5);
POINT_COLOR=BLUE;      
Show_Str(96,207,200,16,"手寫區",16,0);  
tcnt=100;
tcnt=100;
while(1)
{
  key=KEY_Scan(0);
  if(key==WKUP_PRES&&(tp_dev.touchtype&0X80)==0)
  {
   TP_Adjust();   //屏幕校準
   LCD_Clear(WHITE);
   goto RESTART; //重新加載界面
  }
  if(key==KEY0_PRES)
  {
   LCD_Fill(20,115,219,314,WHITE);//清除當前顯示
   mode++;
   if(mode>4)mode=1;
   switch(mode)
   {
    case 1:
     Show_Str(80,207,200,16,"僅識別數字",16,0);
     break;      
    case 2:
     Show_Str(64,207,200,16,"僅識別大寫字母",16,0);
     break;      
    case 3:
     Show_Str(64,207,200,16,"僅識別小寫字母",16,0);
     break;      
    case 4:
     Show_Str(88,207,200,16,"全部識別",16,0);
     break;  
   }
   tcnt=100;
  }     
   tp_dev.scan(0);//掃描
   if(tp_dev.sta&TP_PRES_DOWN)//有按鍵被按下
  {      
   delay_ms(1);//必要的延時,否則老認為有按鍵按下.
    tcnt=0;//松開時的計數器清空         
   if((tp_dev.x[0]<(lcddev.width-20-2)&&tp_dev.x[0]>=(20+2))&&(tp_dev.y[0]<(lcddev.height-5-2)&&tp_dev.y[0]>=(115+2)))
   {   
    if(lastpos[0]==0XFFFF)
    {
     lastpos[0]=tp_dev.x[0];
     lastpos[1]=tp_dev.y[0];
    }
    lcd_draw_bline(lastpos[0],lastpos[1],tp_dev.x[0],tp_dev.y[0],2,BLUE);//畫線
    lastpos[0]=tp_dev.x[0];
    lastpos[1]=tp_dev.y[0];
    if(pcnt<200)//總點數少于200
    {
     if(pcnt)
     {
      if((READ_BUF[pcnt-1].y!=tp_dev.y[0])&&(READ_BUF[pcnt-1].x!=tp_dev.x[0]))//x,y不相等
      {
       READ_BUF[pcnt].x=tp_dev.x[0];
       READ_BUF[pcnt].y=tp_dev.y[0];
       pcnt++;
      }
     }else
     {
      READ_BUF[pcnt].x=tp_dev.x[0];
      READ_BUF[pcnt].y=tp_dev.y[0];
      pcnt++;
     }   
    }                 
   }   
  }else //按鍵松開了
  {
   lastpos[0]=0XFFFF;
   tcnt++;
   delay_ms(10);   
   //延時識別
   i++;      
   if(tcnt==40)
   {
    if(pcnt)//有有效的輸入   
    {
     printf("總點數:%d\r\n",pcnt);
     alientek_ncr(READ_BUF,pcnt,6,mode,(char*)res);
     printf("識別結果:%s\r\n",res);
     pcnt=0;               
       POINT_COLOR=BLUE;//設置畫筆藍色
      LCD_ShowString(30+72,90,200,16,16,res);  
    }
    LCD_Fill(20,115,lcddev.width-20-1,lcddev.height-5-1,WHITE);
   }
  }  
  if(i==30)
  {
   i=0;
   LED0=!LED0;
  }     
}                           
}

詳細信息可參考附件

手寫識別實驗.7z

1.4 MB, 下載次數: 9, 下載積分: 黑幣 -5

回復

使用道具 舉報

ID:1 發表于 2019-4-15 18:19 | 顯示全部樓層
本帖需要重新編輯補全電路原理圖,源碼,詳細說明與圖片即可獲得100+黑幣(帖子下方有編輯按鈕)
回復

使用道具 舉報

ID:91165 發表于 2020-4-19 13:29 | 顯示全部樓層
真是高手,下載看看
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人高清在线 | 亚洲一区二区精品视频 | 一a一片一级一片啪啪 | 一区二区三区精品视频 | 91在线导航 | 中文字幕第5页 | 欧美激情一区二区三级高清视频 | 亚洲人成人一区二区在线观看 | 欧美成人第一页 | 国产女人第一次做爰毛片 | 天天摸天天干 | 日韩久久久久久 | 国产一区二区精品 | 中文字幕亚洲一区 | wwwww在线观看 | 北条麻妃99精品青青久久 | 男人的天堂视频网站 | 羞羞免费网站 | 91精品国产欧美一区二区 | 久久小视频 | 成人区精品一区二区婷婷 | 久久网站黄 | 日日夜夜av| 欧美一级在线 | 精品二三区| 国产9999精品 | 久久99精品国产 | 久久综合伊人 | 国产欧美一区二区精品久导航 | 精品久久久久久亚洲综合网站 | 午夜免费精品视频 | 欧美中文字幕一区 | 欧美一区二区三区久久精品视 | 欧美日韩成人影院 | 久久一区二区三区电影 | 日本免费在线看 | 特级特黄特色的免费大片 | 四虎影视免费在线 | 男女羞羞网站 | 美国黄色毛片 | 成人高潮片免费视频欧美 |