浦江一水 发表于 2024-11-25 18:07:44

AI8051U最简最小系统,实验彩色触摸屏;ILI9341,SPI

Ai8051U最简最小系统实验板,实验触摸屏; ILI9341, SPI

一块洞洞板,一片AI8051U芯片,一只按钮(P32),一只电源开关(On/Off), 一根USB通讯线。
一块2.4寸ILI9341(320*240)SPI接口彩色触摸屏,一字排列14针接口。(RMB 20)
   



实验初成,随手试画了一下,若做触摸菜单,基本没有问题, 还有待打磨优化提高。

望爱好AI8051U单片机同学、尚未得到实验箱的新手坛友,莫等闲,动动手,一定会做得更好。

主程序:(供参考)

/*-------------------------------------------------------------------------*/
/* 基于: AI8051U_自制最小系统实验板 ---------------------------*/
/* 实验: 2.4寸(320*240)触摸屏(14针一字排列接口)LCD9431_SPI_Touxh.C 显示屏   */
/* 实现: 触摸屏+实验画图板                                                */
/* 编程: 浦晓明(浦江一水) 2024.11.25                                  */                                 
//==液晶屏数据/控制线接线====================//
//本模块为SPI接口类型 (+5V供电)
//液晶屏模块      AI8051U   说明
//1. VCC             VCC   电源
//2. GND             GND   接地
//3. CS               P26   屏片选      0:选中 1:未选
//4. RST             P27   屏复位      0:运行 1:复位
//5. DC            P45   屏数据指令切换0:数据 1:指令
//6. SDI             P46   屏数据输入MCU发送
//7. SCK             P07   屏时钟      MCU上升沿写入/下降沿读取
//8. LED             P06   屏背光控制0:灭 1:亮
//9. SDO            P05   屏数据输出MCU接收
//10.T_CLK      P04   触摸板时钟
//11.T_CS          P03   触摸板片选
//12.T_DI          P02   触摸板数据输入MCU发送
//13.T_DO         P01   触摸板数据输出MCU接收
//14.T_IRQ      P00   触摸板状态/请求 MCU接收/查询 0:无触摸 1:有触摸(点压下)
//==================================================//

#include "AI8051U_SYS.H"
#include "LCD9341_SPI.h"//2.4彩屏ILI9431(320*240)驱动
#include "PTouch.H"          //2.4彩屏四线电阻触摸屏驱动

//全局变量说明
unsigned intX,Y;    //触摸点坐标
unsigned char k;   //返回键值
unsigned char disp; //显示标志
unsigned char PenC; //笔色
char S;         //字符串显示缓存

//函数说明
unsigned char RDKEY(void);//读取触摸屏键值
void BigPoint(u16 X,u16 Y,u8 Color);

//主函数入口
void main()
{ u8 i;
P_SW2 = 0x80;         //使能访问XFR,没有冲突不用关闭
CKCON = 0x00;         //外部数据总线速度最快
WTST= 0x00;         //程序等待参数,0最快

P0M0 = 0x00; P0M1 = 0x00;   //初始化端口:全准双向
P1M0 = 0x00; P1M1 = 0x00;
P2M0 = 0x00; P2M1 = 0x00;
P3M0 = 0x00; P3M1 = 0x00;
P4M0 = 0x00; P4M1 = 0x00;
P5M0 = 0x00; P5M1 = 0x00;
   
P3M0 &= ~0x03; P3M1 |= 0x03;//确保P30/P31准确设置

LCD_Init();
disp=1;
while (1)
{ if(disp)
    { disp=0;
      LCD_CLS(15);
      LCD_Box(0, 0,239,20,0,0,0);
      LCD_Str16(8,2,"X=--- Y=---",10,0); //显示字符串
      LCD_Str16(180,2,"AI8051U",12,0);   //显示字符串
      for(i=0;i<8;i++)LCD_Box(30*i,280,30,20,15,15,i);
      for(i=0;i<8;i++)LCD_Box(30*i,300,30,20,15,15,(u8)(i+8));
      LCD_Str16(213,302,"CLS",0,15);      
    }
    k=0; k=RDKEY(); //读取按键或触摸点键值...
    if(k!=0)
    { if(k>15)
      { sprintf(S,"X=%03d",X); LCD_Str16( 8,2,S,10,0);//显示触摸点坐标X
      sprintf(S,"Y=%03d",Y); LCD_Str16(56,2,S,10,0);//显示触摸点坐标Y
      BigPoint(X,Y,PenC);
      }
    }
    //delay_ms(10);//延时50ms
}               //无限循环         
} //主函数main()结束


//扫描触摸屏返回键值
unsigned char RDKEY(void)
{ k=0;   //当前页面按键和触摸点返回值(因页面不同而不同)
if(PTouchOK()){ X=240-TP.x; Y=TP.y; }   //坐标转换(由屏方向不同而不同)
else          { X=0;      Y=0;    }
if((Y>20)&&(Y<280)){ k=18; return k;}   //画笔有效区域
if((X>0)&&(X< 30)&&(Y>280)&&(Y<300)){ k=16; PenC=0; return k;}
if((X> 30)&&(X< 60)&&(Y>280)&&(Y<300)){ k=1;PenC=1; return k;}
if((X> 60)&&(X< 90)&&(Y>280)&&(Y<300)){ k=2;PenC=2; return k;}
if((X> 90)&&(X<120)&&(Y>280)&&(Y<300)){ k=3;PenC=3; return k;}   
if((X>120)&&(X<150)&&(Y>280)&&(Y<300)){ k=4;PenC=4; return k;}   
if((X>150)&&(X<180)&&(Y>280)&&(Y<300)){ k=5;PenC=5; return k;}
if((X>180)&&(X<210)&&(Y>280)&&(Y<300)){ k=6;PenC=6; return k;}
if((X>210)&&(X<240)&&(Y>280)&&(Y<300)){ k=7;PenC=7; return k;}
if((X>0)&&(X< 30)&&(Y>300)&&(Y<320)){ k=8;PenC=8; return k;}
if((X> 30)&&(X< 60)&&(Y>300)&&(Y<320)){ k=9;PenC=9; return k;}
if((X> 60)&&(X< 90)&&(Y>300)&&(Y<320)){ k=10; PenC=10;return k;}
if((X> 90)&&(X<120)&&(Y>300)&&(Y<320)){ k=11; PenC=11;return k;}
if((X>120)&&(X<150)&&(Y>300)&&(Y<320)){ k=12; PenC=12;return k;}
if((X>150)&&(X<180)&&(Y>300)&&(Y<320)){ k=13; PenC=13;return k;}
if((X>180)&&(X<210)&&(Y>300)&&(Y<320)){ k=14; PenC=14;return k;}
if((X>210)&&(X<240)&&(Y>300)&&(Y<320)){ k=15; PenC=0; disp=1; return k;}
return k;
}
//画一大点
void BigPoint(u16 X,u16 Y,u8 Color)
{
LCD_Point(X,Y,Color);
LCD_Point(X-1,Y,Color);
LCD_Point(X+1,Y,Color);
LCD_Point(X-1,Y-1,Color);
LCD_Point(X,Y-1,Color);
LCD_Point(X+1,Y-1,Color);
LCD_Point(X-1,Y+1,Color);
LCD_Point(X,Y+1,Color);
LCD_Point(X+1,Y+1,Color);
}
//===== END ================




浦江一水 发表于 2024-11-26 07:28:22

感谢 autopccopy 版主的鲜花鼓励。
感谢 神农鼎 管理员的鲜花鼓励。

rvoxukvl 发表于 2024-11-28 13:55:39

一块2.4寸ILI9341(320*240)SPI接口彩色触摸屏,一字排列14针接口。(RMB 20)
老师,来个链接,我也练练手

浦江一水 发表于 2024-11-28 16:01:45

rvoxukvl 发表于 2024-11-28 13:55
一块2.4寸ILI9341(320*240)SPI接口彩色触摸屏,一字排列14针接口。(RMB 20)
老师,来个链接,我也练练手 ...

山岩数码之家电子DIY
(复制链接文字有点长,试试看 。)
https://item.taobao.com/item.htm?_u=s29q9rf0b22&id=848549942481&pisk=f_G-yXbZTnxknK7AH990xWT7c7LDnX3ru0u1tkqldmnxvVQoEJq3dWnZXJ1HU72L9mZmZu0uNywIxcMuVYqh9Xnq2_f3NDALAVk28u4oZwUIh0CnE4qoHwFriYf3q3PKRcVpjhAMs4uz9WtMjrNEGIN_W9aCx86bcGqRrdOMs4uYTWtMjCclu0x4S91IA8gblyqbPyw7OEeb8yNCNJ15hiZ4ckNQFkOfhyaFV9a7REQb7z65OT67l-aaPzNQOD6jlQG6vo_7x6H3lB4T0GTht6cYlHrsyQ13kjaJll08Dh9SM5y8f4ZAOhAiyJZL0ftDHqrnnbyZZn18nj0ItSgDV_E-h0oUQXxNaugI7fkG4zGi6N80F_YlFELAL9y7oY7U1euFnOu4klYJ99WU3EzYjEpdL9y5GrEMozXFL-L1.&spm=a1z09.2.0.0.16412e8duN2YZR

15828363460 发表于 2024-11-29 11:36:21

厉害哟

zrl 发表于 2024-12-3 15:50:23

{:4_174:}

men007 发表于 2024-12-12 09:23:00

厉害webkit-fake-url://c0a25ab2-457a-4e8b-856a-6823bd6ec56f/imagepng学习了webkit-fake-url://a72c023f-3ba1-4f74-8cd2-da3a3a8fdb98/imagepng

lgnstar 发表于 2024-12-14 20:02:36

<p>stc 太强大了</p>

durongze 发表于 2025-1-11 13:43:36

我在你的洞洞板上看到了铁丝。这和我之前的操作有点像,我密密麻麻搞了一堆铁丝。

bqtx122 发表于 2025-1-21 20:48:39

厉害
页: [1] 2
查看完整版本: AI8051U最简最小系统,实验彩色触摸屏;ILI9341,SPI