89c51單片機仿真ILI9341彩屏效果圖如下:
仿真圖片
單片機源程序如下:- #include<reg51.h>
- sbit lcdcs=P1^0;
- sbit lcddc=P1^1;
- sbit lcdwr=P1^2;
- sbit lcdrd=P1^3;
- sbit lcdrst=P1^4;
- sbit spiclk=P0^0;
- sbit spisi=P0^1;
- sbit spiso=P0^2;
- sbit spics=P0^3;
- sbit spirst=P0^4;
- unsigned char slh,sll,elh,ell,shh,shl,ehh,ehl;
- #define uchar unsigned char
- #define redh 0xf8
- #define redl 0x00
- #define greenh 0x07
- #define greenl 0xe0
- #define blueh 0x00
- #define bluel 0x1f
- #define whiteh 0xff
- #define whitel 0xff
- #define blackh 0x00
- #define blackl 0x00
- #define huiseh 0xc6
- #define huisel 0x18
- #define shenhuih 0x7b
- #define shenhuil 0xef
- #define yellowh 0xff
- #define yellowl 0xe0
- #define ziseh 0x78
- #define zisel 0x0f
- #define qingseh 0x07
- #define qingsel 0xff
- #define pinhongh 0xf8
- #define pinhongl 0x1f
- #define ganlanlvh 0x7b
- #define ganlanlvl 0xe0
- unsigned char spih,spil;
- void delay(unsigned char x)
- {
- unsigned char i,j,k;
- for(k=0;k<x;k++)
- {
- for(i=0;i<20;i++)
- {
- for(j=0;j<200;j++)
- {
- ;
- }
- }
- }
- }
- void writedata(unsigned char x)
- {
- lcddc=1;
- lcdrd=1;
- P2=x;
- lcdwr=0;
- lcdwr=1;
- }
- void writecmd(unsigned char x)
- {
- lcddc=0;
- lcdrd=1;
- P2=x;
- lcdwr=0;
- lcdwr=1;
- }
- void delay1(void)
- {
- unsigned char i,j;
- for(i=0;i<100;i++)
- for(j=0;j<100;j++);
- }
- void writespi(uchar a,uchar b,uchar c,uchar d)
- {
- unsigned char i,temp,temp1;
- spics=1;
- spics=0;
- spisi=1;
- spiso=1;
- temp1=0x06;
-
- for(i=0;i<8;i++)
- {
- temp=a&0x80;
- if(temp!=0)
- spisi=1;
- else
- spisi=0;
- spiclk=0;
- spiclk=1;
- a=a<<1;
- }
-
- for(i=0;i<8;i++)
- {
- temp=b&0x80;
- if(temp!=0)
- spisi=1;
- else
- spisi=0;
- spiclk=0;
- spiclk=1;
- b=b<<1;
- }
-
- for(i=0;i<8;i++)
- {
- temp=c&0x80;
- if(temp!=0)
- spisi=1;
- else
- spisi=0;
- spiclk=0;
- spiclk=1;
- c=c<<1;
- }
-
- for(i=0;i<8;i++)
- {
- temp=d&0x80;
- if(temp!=0)
- spisi=1;
- else
- spisi=0;
- spiclk=0;
- spiclk=1;
- d=d<<1;
- }
- }
- void readspih(void)
- {
- unsigned char i,temp;
- for(i=0;i<8;i++)
- {
- temp=temp<<1;
- spiclk=1;
- spiclk=0;
- temp=spiso|temp;
- }
- spih=temp;
- temp=0;
- }
- void readspil(void)
- {
- unsigned char i,temp;
- for(i=0;i<8;i++)
- {
- temp=temp<<1;
- spiclk=1;
- spiclk=0;
- temp=spiso|temp;
- }
- spil=temp;
- temp=0;
- }
- void setlse(uchar x1,uchar x2,uchar x3,uchar x4)
- {
- writecmd(0x2a);
- writedata(x1);
- writedata(x2);
- writedata(x3);
- writedata(x4);
-
- }
- void sethse(uchar y1,uchar y2,uchar y3,uchar y4)
- {
- writecmd(0x2b);
- writedata(y1);
- writedata(y2);
- writedata(y3);
- writedata(y4);
-
- }
- void discolor(uchar x)
- {
- unsigned char j;
- unsigned int i;
- setlse(0x00,0x00,0x00,0xef);
- sethse(0x00,0x00,0x01,0x3f);
- writecmd(0x2c);
- for(j=0;j<240;j++)
- {
- for(i=0;i<320;i++)
- {
- switch(x)
- {
- case 0:
- writedata(redh);
- writedata(redl);
- break;
- case 1:
- writedata(greenh);
- writedata(greenl);
- break;
- case 2:
- writedata(blueh);
- writedata(bluel);
- break;
- case 3:
- writedata(whiteh);
- writedata(whitel);
- break;
- case 4:
- writedata(blackh);
- writedata(blackl);
- break;
- case 5:
- writedata(yellowh);
- writedata(yellowl);
- break;
- case 6:
- writedata(ziseh);
- writedata(zisel);
- break;
- case 7:
- writedata(qingseh);
- writedata(qingsel);
- break;
- case 8:
- writedata(huiseh);
- writedata(huisel);
- break;
- case 9:
- writedata(shenhuih);
- writedata(shenhuil);
- break;
- case 10:
- writedata(pinhongh);
- writedata(pinhongl);
- break;
- case 11:
- writedata(ganlanlvh);
- writedata(ganlanlvl);
- break;
- default:
- break;
- }
- }
- }
- }
- void discolorx(void)
- {
- unsigned char i;
- for(i=0;i<12;i++)
- discolor(i);
- }
- void discaitiao(void)
- {
- unsigned char i,j,k;
- setlse(0,0,0,239);
- sethse(0,0,1,63);
- writecmd(0x2c);
- for(k=0;k<10;k++)
- {
- for(i=0;i<32;i++)
- for(j=0;j<240;j++)
- {
- if(k==0)
- {
- writedata(redh);
- writedata(redl);
- }
- if(k==1)
- {
- writedata(greenh);
- writedata(greenl);
- }
- if(k==2)
- {
- writedata(blueh);
- writedata(bluel);
- }
- if(k==3)
- {
- writedata(whiteh);
- writedata(whitel);
- }
- if(k==4)
- {
- writedata(blackh);
- writedata(blackl);
- }
- if(k==5)
- {
- writedata(yellowh);
- writedata(yellowl);
- }
- if(k==6)
- {
- writedata(ziseh);
- writedata(zisel);
- }
- if(k==7)
- {
- writedata(qingseh);
- writedata(qingsel);
- }
- if(k==8)
- {
- writedata(huiseh);
- writedata(huisel);
- }
- if(k==9)
- {
- writedata(shenhuih);
- writedata(shenhuil);
- }
- }
- }
-
- }
- void dispic(void)
- {
- unsigned char j,k;
- unsigned int i;
-
- spics=0;
-
- writespi(0x03,0,0,0);
-
- spics=1;
- spics=0;
- writespi(0x03,0,0,0);
-
- for(k=0;k<6;k++)
- {
- setlse(0x00,0x00,0x00,0xef);
- sethse(0x00,0x00,0x01,0x3f);
- writecmd(0x2c);
-
- for(j=0;j<240;j++)
- {
- for(i=0;i<320;i++)
- {
- readspih();
- readspil();
- writedata(spih);
- writedata(spil);
- }
-
- }
- }
- discolorx();
- discaitiao();
- }
- void main(void)
- {
- lcdcs=0;
- lcdrst=0;
- delay(1);
- lcdrst=1;
- writecmd(0x01);
- delay(1);
- writecmd(0x29);
- writecmd(0x3a);
- writedata(0x65);
- setlse(0x00,0x00,0x00,0xef);
- sethse(0x00,0x00,0x01,0x3f);
- writecmd(0x13);
- writecmd(0x38);
- writecmd(0x11);
- delay1();
- writecmd(0x3a);
- delay1();
- writedata(0x56);
- writecmd(0x36);
- writedata(0x48);
- writecmd(0x2c);
- while(1)
- {
- dispic();
- }
- }
復制代碼
proteus8.11仿真文件+keil工程文件(注意只能用Proteus8.11才能打開 其他版本都不行):
ili9341jj.zip.7z
(1.64 MB, 下載次數: 142)
2024-1-26 19:52 上傳
點擊文件名下載附件
proteus仿真+keil
|