找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3262|回复: 10
收起左侧

89c51单片机仿真彩屏ILI9341液晶屏porteus仿真+keil工程

  [复制链接]
ID:654772 发表于 2021-12-17 20:32 | 显示全部楼层 |阅读模式
89c51单片机仿真ILI9341彩屏效果图如下:

仿真图片

仿真图片


单片机源程序如下:
  1. #include<reg51.h>
  2. sbit lcdcs=P1^0;
  3. sbit lcddc=P1^1;
  4. sbit lcdwr=P1^2;
  5. sbit lcdrd=P1^3;
  6. sbit lcdrst=P1^4;
  7. sbit spiclk=P0^0;
  8. sbit spisi=P0^1;
  9. sbit spiso=P0^2;
  10. sbit spics=P0^3;
  11. sbit spirst=P0^4;
  12. unsigned char slh,sll,elh,ell,shh,shl,ehh,ehl;
  13. #define uchar unsigned char
  14. #define redh 0xf8
  15. #define redl 0x00
  16. #define greenh 0x07
  17. #define greenl 0xe0
  18. #define blueh 0x00
  19. #define bluel 0x1f
  20. #define whiteh 0xff
  21. #define whitel 0xff
  22. #define blackh 0x00
  23. #define blackl 0x00
  24. #define huiseh 0xc6
  25. #define huisel 0x18
  26. #define shenhuih 0x7b
  27. #define shenhuil 0xef
  28. #define yellowh 0xff
  29. #define yellowl 0xe0
  30. #define ziseh 0x78
  31. #define zisel 0x0f
  32. #define qingseh 0x07
  33. #define qingsel 0xff
  34. #define pinhongh 0xf8
  35. #define pinhongl 0x1f
  36. #define ganlanlvh 0x7b
  37. #define ganlanlvl 0xe0
  38. unsigned char spih,spil;
  39. void delay(unsigned char x)
  40. {
  41.         unsigned char i,j,k;
  42.         for(k=0;k<x;k++)
  43.         {
  44.           for(i=0;i<20;i++)
  45.           {
  46.                   for(j=0;j<200;j++)
  47.                   {
  48.                           ;
  49.                   }
  50.           }
  51.   }
  52. }
  53. void writedata(unsigned char x)
  54. {
  55.         lcddc=1;
  56.         lcdrd=1;
  57.         P2=x;
  58.         lcdwr=0;
  59.         lcdwr=1;
  60. }
  61. void writecmd(unsigned char x)
  62. {
  63.         lcddc=0;
  64.         lcdrd=1;
  65.         P2=x;
  66.         lcdwr=0;
  67.         lcdwr=1;
  68. }
  69. void delay1(void)
  70. {
  71.         unsigned char i,j;
  72.         for(i=0;i<100;i++)
  73.         for(j=0;j<100;j++);
  74. }
  75. void writespi(uchar a,uchar b,uchar c,uchar d)
  76. {
  77.         unsigned char i,temp,temp1;
  78.         spics=1;
  79.         spics=0;
  80.         spisi=1;
  81.         spiso=1;
  82.         temp1=0x06;
  83.         
  84.         for(i=0;i<8;i++)
  85.         {
  86.                 temp=a&0x80;
  87.                 if(temp!=0)
  88.                         spisi=1;
  89.                 else
  90.                         spisi=0;
  91.                 spiclk=0;
  92.                 spiclk=1;
  93.                 a=a<<1;
  94.         }
  95.         
  96.         for(i=0;i<8;i++)
  97.         {
  98.                 temp=b&0x80;
  99.                 if(temp!=0)
  100.                         spisi=1;
  101.                 else
  102.                         spisi=0;
  103.                 spiclk=0;
  104.                 spiclk=1;
  105.                 b=b<<1;
  106.         }
  107.         
  108.         for(i=0;i<8;i++)
  109.         {
  110.                 temp=c&0x80;
  111.                 if(temp!=0)
  112.                         spisi=1;
  113.                 else
  114.                         spisi=0;
  115.                 spiclk=0;
  116.                 spiclk=1;
  117.                 c=c<<1;
  118.         }
  119.         
  120.         for(i=0;i<8;i++)
  121.         {
  122.                 temp=d&0x80;
  123.                 if(temp!=0)
  124.                         spisi=1;
  125.                 else
  126.                         spisi=0;
  127.                 spiclk=0;
  128.                 spiclk=1;
  129.                 d=d<<1;
  130.         }
  131. }

  132. void readspih(void)
  133. {
  134.         unsigned char i,temp;
  135.         for(i=0;i<8;i++)
  136.         {
  137.                 temp=temp<<1;
  138.                 spiclk=1;
  139.                 spiclk=0;
  140.                 temp=spiso|temp;
  141.         }
  142.         spih=temp;
  143.         temp=0;
  144. }
  145. void readspil(void)
  146. {
  147.         unsigned char i,temp;

  148.         for(i=0;i<8;i++)
  149.         {
  150.                 temp=temp<<1;
  151.                 spiclk=1;
  152.                 spiclk=0;
  153.                 temp=spiso|temp;

  154.         }
  155.         spil=temp;
  156.         temp=0;
  157. }
  158. void setlse(uchar x1,uchar x2,uchar x3,uchar x4)
  159. {
  160.         writecmd(0x2a);
  161.         writedata(x1);
  162.         writedata(x2);
  163.         writedata(x3);
  164.         writedata(x4);
  165.         
  166. }
  167. void sethse(uchar y1,uchar y2,uchar y3,uchar y4)
  168. {
  169.         writecmd(0x2b);
  170.         writedata(y1);
  171.         writedata(y2);
  172.         writedata(y3);
  173.         writedata(y4);
  174.         
  175. }
  176. void discolor(uchar x)
  177. {
  178.         unsigned char j;
  179.         unsigned int i;
  180.         setlse(0x00,0x00,0x00,0xef);
  181.         sethse(0x00,0x00,0x01,0x3f);
  182.         writecmd(0x2c);
  183.         for(j=0;j<240;j++)
  184.           {
  185.      for(i=0;i<320;i++)
  186.       {
  187.                                 switch(x)
  188.                 {
  189.                         case 0:
  190.                                     writedata(redh);
  191.                                     writedata(redl);
  192.                                                 break;
  193.                                                 case 1:
  194.                                     writedata(greenh);
  195.                                     writedata(greenl);
  196.                                                 break;
  197.                                                 case 2:
  198.                                     writedata(blueh);
  199.                                     writedata(bluel);
  200.                                                 break;
  201.                                                 case 3:
  202.                                     writedata(whiteh);
  203.                                     writedata(whitel);
  204.                                                 break;
  205.                                                 case 4:
  206.                                     writedata(blackh);
  207.                                     writedata(blackl);
  208.                                                 break;
  209.                                                 case 5:
  210.                                     writedata(yellowh);
  211.                                     writedata(yellowl);
  212.                                                 break;
  213.                                                 case 6:
  214.                                     writedata(ziseh);
  215.                                     writedata(zisel);
  216.                                                 break;
  217.                                                 case 7:
  218.                                     writedata(qingseh);
  219.                                     writedata(qingsel);
  220.                                                 break;
  221.                                                 case 8:
  222.                                     writedata(huiseh);
  223.                                     writedata(huisel);
  224.                                                 break;
  225.                                                 case 9:
  226.                                     writedata(shenhuih);
  227.                                     writedata(shenhuil);
  228.                                                 break;
  229.                                                 case 10:
  230.                                     writedata(pinhongh);
  231.                                     writedata(pinhongl);
  232.                                                 break;
  233.                                                 case 11:
  234.                                     writedata(ganlanlvh);
  235.                                     writedata(ganlanlvl);
  236.                                                 break;
  237.                                                 default:
  238.                                                 break;
  239.                                         }
  240.                         }
  241.                 }        

  242. }

  243. void discolorx(void)
  244. {
  245.         unsigned char i;
  246.                 for(i=0;i<12;i++)
  247.             discolor(i);
  248. }

  249. void discaitiao(void)
  250. {
  251.         unsigned char i,j,k;
  252.         setlse(0,0,0,239);
  253.         sethse(0,0,1,63);
  254.         writecmd(0x2c);
  255.         for(k=0;k<10;k++)
  256.         {
  257.         for(i=0;i<32;i++)
  258.         for(j=0;j<240;j++)
  259.         {
  260.                 if(k==0)
  261.                 {
  262.                  writedata(redh);
  263.                  writedata(redl);
  264.                 }
  265.                 if(k==1)
  266.                 {
  267.                  writedata(greenh);
  268.                  writedata(greenl);
  269.                 }
  270.                 if(k==2)
  271.                 {
  272.                  writedata(blueh);
  273.                  writedata(bluel);
  274.                 }
  275.                 if(k==3)
  276.                 {
  277.                  writedata(whiteh);
  278.                  writedata(whitel);
  279.                 }
  280.                 if(k==4)
  281.                 {
  282.                  writedata(blackh);
  283.                  writedata(blackl);
  284.                 }
  285.                 if(k==5)
  286.                 {
  287.                  writedata(yellowh);
  288.                  writedata(yellowl);
  289.                 }
  290.                 if(k==6)
  291.                 {
  292.                  writedata(ziseh);
  293.                  writedata(zisel);
  294.                 }
  295.                 if(k==7)
  296.                 {
  297.                  writedata(qingseh);
  298.                  writedata(qingsel);
  299.                 }
  300.                 if(k==8)
  301.                 {
  302.                  writedata(huiseh);
  303.                  writedata(huisel);
  304.                 }
  305.                 if(k==9)
  306.                 {
  307.                  writedata(shenhuih);
  308.                  writedata(shenhuil);
  309.                 }
  310.         }
  311. }
  312.         
  313. }
  314. void dispic(void)
  315. {
  316.         unsigned char j,k;
  317.         unsigned int i;
  318.         
  319.         spics=0;
  320.         
  321.         writespi(0x03,0,0,0);
  322.         
  323.                 spics=1;
  324.                 spics=0;
  325.                 writespi(0x03,0,0,0);
  326.                
  327.         for(k=0;k<6;k++)
  328.         {
  329.                 setlse(0x00,0x00,0x00,0xef);
  330.                 sethse(0x00,0x00,0x01,0x3f);
  331.                 writecmd(0x2c);
  332.                
  333.                 for(j=0;j<240;j++)
  334.                 {
  335.                         for(i=0;i<320;i++)
  336.                         {        
  337.                                 readspih();
  338.                                 readspil();
  339.                                 writedata(spih);
  340.                                 writedata(spil);
  341.                         }
  342.                         
  343.                 }               
  344.         }
  345.         discolorx();
  346.         discaitiao();
  347. }
  348. void main(void)
  349. {
  350.         lcdcs=0;
  351.         lcdrst=0;
  352.         delay(1);
  353.         lcdrst=1;
  354.         writecmd(0x01);
  355.         delay(1);
  356.         writecmd(0x29);
  357.         writecmd(0x3a);
  358.         writedata(0x65);
  359.         setlse(0x00,0x00,0x00,0xef);
  360.         sethse(0x00,0x00,0x01,0x3f);
  361.         writecmd(0x13);
  362.         writecmd(0x38);
  363.         writecmd(0x11);
  364.         delay1();
  365.         writecmd(0x3a);
  366.         delay1();
  367.         writedata(0x56);
  368.         writecmd(0x36);
  369.         writedata(0x48);        
  370.         writecmd(0x2c);
  371.         while(1)
  372.         {        
  373.          dispic();
  374.   }
  375. }
复制代码

proteus8.11仿真文件+keil工程文件(注意只能用Proteus8.11才能打开 其他版本都不行):
ili9341jj.zip.7z (1.64 MB, 下载次数: 132)

评分

参与人数 1黑币 +20 收起 理由
admin + 20 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:95059 发表于 2022-8-26 03:38 | 显示全部楼层
不知道这图片从哪来的,为啥能显示这些,代码里也没有啊?好奇
回复

使用道具 举报

ID:1061399 发表于 2023-1-18 21:07 | 显示全部楼层
D0-D9不使用吗?我看别人的都连接上了
回复

使用道具 举报

ID:289218 发表于 2023-5-21 23:41 | 显示全部楼层
可以仿真,感谢分享!
回复

使用道具 举报

ID:289218 发表于 2023-5-22 23:51 | 显示全部楼层
lanxichang 发表于 2022-8-26 03:38
不知道这图片从哪来的,为啥能显示这些,代码里也没有啊?好奇

压缩包中有两个bin文件,Protues将bin文件加载到M45PE16中,单片机通过I/O口模拟SPI读取M45PE16中的数据后在发送到TFT上进行显示。
回复

使用道具 举报

ID:253767 发表于 2023-5-24 08:01 | 显示全部楼层
Proteus8.9不能运行该程序,是因为“无法打开MODDATA初始值设定项文件pictigi.bin”
回复

使用道具 举报

ID:253767 发表于 2023-5-24 08:23 | 显示全部楼层
我按照楼主提供的资料,在PROTEUS8.9绘制了原理图,复制了程序文件,但只先后显示10种单色页面,和一帧彩条页面。 该图即10帧单色页面之后显示的彩条页面。
屏幕截图 2023-05-24 081606.png
回复

使用道具 举报

ID:46087 发表于 2024-1-24 08:58 | 显示全部楼层
tieq1952 发表于 2023-5-24 08:01
Proteus8.9不能运行该程序,是因为“无法打开MODDATA初始值设定项文件pictigi.bin”

M45PE16里面的bin如何制作出来的?我想替换成自己的图片 请不吝赐教 先谢谢
回复

使用道具 举报

ID:1110011 发表于 2024-1-24 11:43 | 显示全部楼层
感谢分享 解决我的问题
回复

使用道具 举报

ID:46087 发表于 2024-1-26 09:43 | 显示全部楼层
我感觉这个图片和程序之间没有关系...
回复

使用道具 举报

ID:654772 发表于 2024-2-17 17:45 | 显示全部楼层
cooc22 发表于 2024-1-26 09:43
我感觉这个图片和程序之间没有关系...

肯定是有关系的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表