本帖最后由 michaelchain 于 2022-1-4 23:51 编辑
在这里放一份, 方便测试屏幕的时候用, 这样不需要临时找
pin脚定义
代码看附件, 项目只有一个main.c, 需要修改的是这部分, 因为使用GPIO模拟的SPI, 所以基本上可以换成任意IO口
- sbit CS=P3^5;
- sbit RESET=P3^7;
- sbit CD=P3^6;
- sbit SCL=P3^2;
- sbit SDA=P3^4;
复制代码
部分代码
- #include <reg51.h>
- sfr P3M0 = 0xB2;
- sfr P3M1 = 0xB1;
- sfr P_SW1 = 0xA2;
- sbit CS=P3^5;
- sbit RESET=P3^7;
- sbit CD=P3^6;
- sbit SCL=P3^2;
- sbit SDA=P3^4;
- sbit KEY_PRESS=P1^3;
- sbit DEC_KEY=P1^2;
- sbit EXIT_KEY=P1^1;
- /**********************************/
- /* Parameter Define */
- /**********************************/
- #define CONTRAST=0x0C
- #define DATA0=0x40
- #define DATA1=0x41
- unsigned char page_width;
- unsigned char seg_width;
- unsigned char Buf_1,Buf_2,Buf_3,conversion;
- unsigned char *char_point;
- int contrast;
- /**********************************/
- /* Picture data */
- /**********************************/
- unsigned char code row_table[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- unsigned char code char_0[]={62,65,65,62,0 };
- unsigned char code char_1[]={0,66,127,64,0 };
- unsigned char code char_2[]={98,81,73,70,0};
- unsigned char code char_3[]={34,73,73,54,0 };
- unsigned char code char_4[]={28,18,127,16,0 };
- unsigned char code char_5[]={39,69,69,57,0};
- unsigned char code char_6[]={62,73,73,50,0};
- unsigned char code char_7[]={1,121,7,1,0};
- unsigned char code char_8[]={54,73,73,54,0 };
- unsigned char code char_9[]={6,73,73,62,0};
- /**********************************/
- /* Time Delay */
- /**********************************/
- void Delay(long i)
- {
- while(i!=0)
- {
- i--;
- }
- }
- /**********************************/
- /* Transfer Commmand */
- /**********************************/
- void Write_Command(unsigned char command)
- {
- int i,j;
- j=0x80;
- CS=0;
- CD=0;
- for(i=0;i<8;i++)
- {
- SCL=0;
- if(command&j)SDA=1;
- else SDA=0;
- SCL=1;
- j=j>>1;
- }
- CS=1;
- }
- /**********************************/
- /* Transfer Data */
- /**********************************/
- void Write_Data(unsigned char data1)
- {
- int i,j;
- j=0x80;
- CS=0;
- CD=1;
- for(i=0;i<8;i++)
- {
- SCL=0;
- if(data1&j)SDA=1;
- else SDA=0;
- SCL=1;
- j=j>>1;
- }
- CS=1;
- }
- //-------------------------------------------------------------------
- void Set_column_addr(unsigned char add)
- {
- unsigned char temp;
- temp=add;
- add=add>>4;
- add=add&0x0f;
- add=add|0x10;
- Write_Command(add); //Set upper addr;
- add=temp;
- add=add&0x0F;
- Write_Command(add); //Set lower addr;
- }
- //-----------------------------------------------------------------
- void Set_row_addr(unsigned char row)
- {
- row=row&0x0F;
- row=row|0x0B0;
- Write_Command(row); //page addr set
- }
- /**********************************/
- /* LCD Initial Code */
- /**********************************/
- void Lcd_Set()
- {
- RESET=0;
- Delay(1000);
- RESET=1;
- Delay(1000);
- Write_Command(0xE2); //Software Reset
- Write_Command(0xA2); //Set Bias 0xA2
- Write_Command(0xA0); //Segment Direction Select ,bit0=1,reverse;=0,normal;
- Write_Command(0xC8); //Common Direction Select,bit3=1,reverse direction;=0,normal;
- Write_Command(0x2C); //Power Control Set
- Delay(10);
- Write_Command(0x2E); //Power Control Set
- Delay(10);
- Write_Command(0x2F); //Power Control Set
- Delay(10);
- Write_Command(0x24); //set ra/rb 0x25
- Write_Command(0x81); //Set Contrast
- Write_Command(0x2C); //29
- Write_Command(0xAF); //Display ON
- }
- /**********************************/
- /* Clear Display */
- /**********************************/
- void Display_Clear(data1,data2)
- {
- int i,j,m;
- m=0xb0;
- for(i=0;i<9;i++)
- {
- Write_Command(m);
- Write_Command(0x10);
- Write_Command(0x00);
- for(j=0;j<66;j++)
- {
- Write_Data(data1);
- Write_Data(data2);
- }
- m++;
- }
- }
- void show_three_h_bar(int row)
- {
- int i,page,row_data;
- page=row/8;
- i=row%8;
- row_data=row_table[i];
- Set_row_addr(page-1); //清除前一条横线
- Set_column_addr(00);
- for(i=0;i<132;i++)
- {
- Write_Data(0x00);
- }
- Set_row_addr(page); //清除前一条横线
- Set_column_addr(00);
- for(i=0;i<132;i++)
- {
- Write_Data(0x00);
- }
- Set_row_addr(page);
- Set_column_addr(00);
- for(i=0;i<132;i++)
- {
- Write_Data(row_data);
- }
- }
- /**********************************/
- /* three vertical bar */
- /**********************************/
- void show_three_v_bar(int bar)
- {
- int i;
- Set_column_addr(bar-1);
- for(i=0;i<9;i++)
- {
- Set_row_addr(i);
- Set_column_addr(bar-1);
- Write_Data(0x00);
- }
- Set_column_addr(bar);
- for(i=0;i<9;i++)
- {
- Set_row_addr(i);
- Set_column_addr(bar);
- Write_Data(0x0ff);
- }
- for(i=0;i<9;i++)
- {
- Set_row_addr(i);
- Set_column_addr(bar+1);
- Write_Data(0x0ff);
- }
- for(i=0;i<9;i++)
- {
- Set_row_addr(i);
- Set_column_addr(bar+2);
- Write_Data(0x0ff);
- }
- }
- /**********************************/
- /* one vertical bar */
- /**********************************/
- void show_one_v_bar(int bar)
- {
- int i;
- Set_column_addr(bar-1);
- for(i=0;i<9;i++)
- {
- Set_row_addr(i);
- Set_column_addr(bar-1);
- Write_Data(0x00);
- }
- Set_column_addr(bar);
- for(i=0;i<9;i++)
- {
- Set_row_addr(i);
- Set_column_addr(bar);
- Write_Data(0x0ff);
- }
- }
- /**********************************/
- /* one horizontal bar */
- /**********************************/
- void show_one_h_bar(int row)
- {
- int i,page,row_data;
- page=row/8;
- i=row%8;
- row_data=row_table[i];
-
- Set_row_addr(page-1); //清除前一条横线
- Set_column_addr(00);
- for(i=0;i<132;i++)
- {
- Write_Data(0x00);
- }
- Set_row_addr(page); //清除前一条横线
- Set_column_addr(00);
- for(i=0;i<132;i++)
- {
- Write_Data(0x00);
- }
- Set_row_addr(page);
- Set_column_addr(00);
- for(i=0;i<132;i++)
- {
- Write_Data(row_data);
- }
- }
- /**********************************/
- /* Display Font */
- /**********************************/
- void Display_Font(unsigned char page0,seg0,unsigned char *p)
- {
- int i,m,n;
- m=((seg0&0xf0)>>4)|0x10;
- n=seg0&0x0f;
- Write_Command(page0);
- Write_Command(m);
- Write_Command(n);
- for(i=0;i<5;i++)
- {
- Write_Data(*p++);
- }
- }
- /**********************************/
- /* Display Hanzi */
- /**********************************/
- void Display_Hanzi(unsigned char page0,seg0,unsigned char *p)
- {
- int i,m,n;
- m=((seg0&0xf0)>>4)|0x10;
- n=seg0&0x0f;
- Write_Command(page0);
- Write_Command(m);
- Write_Command(n);
- for(i=0;i<16;i++)
- {
- Write_Data(*p++);
- }
- m=((seg0&0xf0)>>4)|0x10;
- n=seg0&0x0f;
- Write_Command(page0+1);
- Write_Command(m);
- Write_Command(n);
- for(i=0;i<16;i++)
- {
- Write_Data(*p++);
- }
- }
- /**********************************/
- /* Display Character */
- /**********************************/
- void Display_Character(unsigned char page0,seg0,unsigned char *p0)
- {
- int step0=10;
- int step1=5;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- seg0=seg0+step0;
- p0=p0+step1;
- Display_Font(page0,seg0,p0);
- }
- void Show_one_char(unsigned char xs,unsigned char page,unsigned char *p)
- {
- int i;
- Set_column_addr(xs); //column addr set
- Set_row_addr(page);
- for(i=0;i<5;i++) //5X8 font
- {
- Write_Data(*(p++));
- //Write_Data(*(p++));
- }
- }
- void Conversion_T0_char(int number)
- {
- Buf_1=number/100;
- conversion=number%100;
- Buf_2=conversion/10;
- Buf_3=conversion%10;
- }
- char *Get_addr(int num)
- {
- unsigned char *pt;
- switch(num)
- {
- case 0: pt=char_0;break;
- case 1: pt=char_1;break;
- case 2: pt=char_2;break;
- case 3: pt=char_3;break;
- case 4: pt=char_4;break;
- case 5: pt=char_5;break;
- case 6: pt=char_6;break;
- case 7: pt=char_7;break;
- case 8: pt=char_8;break;
- case 9: pt=char_9;break;
- }
- return pt;
- }
- void show_three_number(unsigned char x,y,int n)
- {
- Conversion_T0_char(n);
- char_point=Get_addr(Buf_1);
- Show_one_char(x,y,char_point);
- char_point=Get_addr(Buf_2);
- x=x+5;
- Show_one_char(x,y,char_point);
- char_point=Get_addr(Buf_3);
- x=x+5;
- Show_one_char(x,y,char_point);
- }
- void Wait_Press()
- {
- while(KEY_PRESS);
- Delay(0x5000);
- }
- /**********************************/
- /* Draw a image */
- /**********************************/
- void Display_Image(unsigned char page0,seg0,pagew,segw,unsigned char *p)
- {
- int i,j,m,n;
- m=((seg0&0xf0)>>4)|0x10;
- n=seg0&0x0f;
- for(i=0;i<pagew;i++)
- {
- Write_Command(page0);
- Write_Command(m);
- Write_Command(n);
- for(j=0;j<segw;j++)
- {
- Write_Data(*(p++));
- }
- page0++;
- }
- }
- //REGULATE CONTRAST
- void Regulate_contrast()
- {
-
- while(EXIT_KEY&&01)
- {
- if(KEY_PRESS==0)
- {
- contrast=contrast+1;
- Write_Command(0x81); //Set Contrast
- Write_Command(contrast);
- Delay(0x5000);
- }
- if(DEC_KEY==0)
- {
- contrast=contrast-1;
- Write_Command(0x81); //Set Contrast
- Write_Command(contrast);
- Delay(0x5000);
- }
- }
- }
- void main()
- {
- int i;
- int j=0x40;
- contrast=0x0C;
- //P_SW1 |= 0x0C;
- P3M0 = 0x00;
- P3M1 = 0x00;
- Lcd_Set();
- while(1)
- {
- Display_Image(0xb0,0x01,8,128,description1);
- Wait_Press(); //Delay(0x5000);
- Display_Image(0xb0,0x01,8,128,description2);
- Wait_Press(); //Delay(0x5000);
- Display_Image(0xb0,0x01,8,128,description3);
- Wait_Press(); //Delay(0x5000);
- Display_Image(0xb0,0x01,8,128,description4);
- Wait_Press(); //Delay(0x5000);
- Display_Image(0xb0,0x01,8,128,description5);
- Wait_Press(); //Delay(0x5000);
- Display_Clear(0x00,0x00);
- Display_Clear(0x55,0xaa); //SNOW
- Wait_Press();
- Display_Clear(0x00,0x00);
- Display_Clear(0xFF,0xFF); //BLACK
- Wait_Press();
-
- Display_Clear(0x00,0x00);
- Display_Clear(0xff,0x00); //V_BAR
- Wait_Press();
-
- Display_Clear(0x00,0x00);
- Display_Clear(0x55,0x55); //H_BAR
- Wait_Press();
-
- Display_Clear(0x00,0x00);
- //Display_Clear(0xFF,0xFF); //BLACK
- for(i=0;i<65;i++)
- {
- show_one_h_bar(i);
- show_three_number(4,3,i);
- Wait_Press();
- }
- }
- }
复制代码
完整项目看附件
stc8h_st7565r.zip
(12.71 KB, 下载次数: 110)
|