⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test1.c

📁 Mega8单片机操作SED1335控制器的320*240单色液晶屏的例子
💻 C
字号:
#include<iom8.h>
//#include <inavr.h>   
   
#ifndef uchar 
  #define uchar unsigned char 
#endif 
#ifndef uint 
  #define uint unsigned int
#endif

#define nop() asm("nop")


#define LCD_BUS  PORTD       
#define _WR      PORTC_Bit2      
#define _RD      PORTC_Bit3      
#define _CS      PORTC_Bit4   
#define  AO      PORTC_Bit1      
#define _RES     PORTC_Bit5      

void delay_ms(unsigned int);

void Cmdwrite(unsigned char);//写指令
void Datawrite(unsigned char);//写数据
void showstr(void);//显示字符串
void showpic(void);//显示图形



struct 
{
 uchar  strstartrow;//起始行 字符方式下一共30行
 uchar  strstartcol;//起始列 字符方式下一共40列,每列8位
 uchar  strwidth;//显示区域宽度 最大40
 uchar  strhigh;//显示区域高度  最大30
 uint   strnum;//字符数  
 uchar  __flash *strp; //字符指针
}strinf;
struct
{
 uchar picstartrow;//起始行 图形方式下一共240行
 uint picstartcol;//起始列 图形方式下一共320列
 uint  picwidth;//图形宽度   最大为320*240
 uchar pichigh;//图形高度
 uchar __flash *picp;//图形指针
}picinf;

unsigned char __flash strdata[]="Hello World!";
unsigned char __flash picdata[]=
{
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFE,0x7D,0x7F,0xFF,0xFF,0xFF,0xFD,0xEF,0xFF,0xF0,0x04,0x3F,0xFF,0xFF,0xFF,0xFD,
0xBD,0x7F,0xFF,0xFF,0xFF,0xE6,0xE7,0xFF,0xF4,0x00,0x7F,0xFF,0xFF,0xFF,0xFD,0x3D,
0x7F,0xFF,0xFF,0xFF,0xDE,0x00,0xFF,0xF0,0x00,0x7F,0xFF,0xFF,0xFF,0xC4,0x3E,0x7F,
0xFF,0xFF,0xFF,0xA8,0x00,0x1F,0xF0,0x00,0x7F,0xFF,0xFF,0xFF,0xBA,0x46,0x7F,0x7F,
0xFF,0xFF,0x70,0x00,0x0E,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0x7D,0xBB,0x5F,0x7F,0xFF,
0xFE,0xE1,0x70,0x01,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0x7D,0xA3,0xEF,0x9F,0xFF,0xFF,
0x06,0xF8,0x03,0xF0,0x00,0xFF,0xFF,0xFF,0xF0,0x7C,0x07,0xB6,0x07,0xFF,0xFF,0xCC,
0xF9,0x81,0xF0,0x01,0xFF,0xFF,0xFF,0xEF,0x75,0xDF,0xB8,0x01,0xFF,0xFF,0x98,0xF9,
0x80,0xF1,0xF1,0xEF,0xFF,0xFF,0xEF,0x6D,0xEF,0x58,0xE0,0xFF,0xFF,0x90,0x70,0x00,
0xF3,0xFB,0xFF,0xFF,0xFF,0xEF,0xBB,0xEE,0xD9,0xF0,0xFF,0xFF,0xB0,0x0C,0x00,0x73,
0x1B,0xAF,0xFF,0xFF,0xF7,0x87,0xAE,0xC2,0xF0,0x7F,0xFF,0xE0,0x0C,0x62,0x36,0xFD,
0xFF,0xFF,0xFF,0xF0,0x33,0xDD,0xD2,0x60,0x7F,0xFF,0xE0,0x31,0x61,0x76,0xFD,0xEF,
0xFF,0xFF,0xEF,0xA0,0x3B,0xF4,0x18,0x3F,0xFF,0xE0,0x30,0x09,0x6C,0x3D,0xFF,0xFF,
0xFF,0xDF,0x83,0xB6,0xA5,0x98,0x3F,0xFF,0xE0,0x00,0x01,0x7B,0xDD,0xAF,0xFF,0xFF,
0xDE,0x83,0xCF,0xED,0x80,0x3F,0xFF,0xE0,0x00,0x01,0xFA,0xDD,0xFF,0xFF,0xFF,0xDD,
0x7B,0xDE,0xF4,0x00,0x3F,0xFF,0xE0,0x00,0x09,0xFB,0xDD,0xEF,0xFF,0xFF,0xEE,0x5B,
0xDF,0xF4,0x00,0x3F,0xFF,0xF0,0x00,0x29,0xF9,0xBB,0xFF,0xFF,0xFF,0xF1,0x79,0xBE,
0xB4,0x00,0x3F,0xFF,0xF0,0x00,0x33,0xFF,0xFA,0xAF,0xFF,0xFF,0xEF,0x68,0x03,0xF8,
0x00,0x3F,0xFF,0xF8,0x0F,0xE3,0xFF,0xF7,0xFF,0xFF,0xFF,0xDF,0x70,0x16,0xEA,0x01,
0x3F,0xFF,0xF8,0x1F,0xC7,0xEF,0xF6,0xEF,0xFF,0xFF,0x07,0x80,0x0F,0xFA,0x1D,0x7F,
0xE0,0x3C,0x7F,0x87,0xEF,0xEF,0xFF,0xFF,0xFF,0x0B,0xA0,0x2A,0xB6,0x1E,0x70,0x1F,
0xBF,0x3E,0x0F,0xD3,0x9A,0xAF,0xFF,0xFF,0x85,0xA0,0x5F,0xF7,0x3C,0xF7,0xE0,0x3C,
0x00,0x3F,0xDC,0x7F,0xFF,0xFF,0xFF,0x41,0x11,0x2E,0xF6,0x81,0xF8,0x00,0x3F,0x00,
0xFF,0xAF,0x8E,0xEF,0xFF,0xFF,0x94,0xA0,0xFF,0xF7,0xFF,0xF8,0x00,0x3F,0xFF,0x1F,
0xBF,0x77,0xFF,0xFF,0xFF,0xE2,0x3F,0xAA,0xB7,0x8B,0xFC,0x00,0x3F,0xDF,0xDF,0x6A,
0xFA,0xAF,0xFF,0xFF,0x88,0x01,0xFF,0xFB,0x75,0xFC,0x00,0x3F,0xDF,0xBE,0xFE,0xFB,
0xFF,0xFF,0xFF,0x40,0x00,0x3E,0xEB,0xB7,0xFE,0x00,0x3F,0xE0,0x7C,0x78,0xFB,0xF7,
0xFF,0xFF,0x00,0x00,0x0F,0xFD,0xC7,0xFE,0x01,0xBF,0xFF,0xFA,0xA7,0x70,0x6F,0xFF,
0xFF,0x0F,0xBF,0x0A,0xAA,0xFF,0xFE,0x0F,0xBF,0xFF,0xE7,0xCF,0x8F,0xAF,0xFF,0xFF,
0x47,0x5E,0x2F,0xFF,0x7F,0xFF,0x1F,0xBF,0xFF,0xDF,0xEF,0x8F,0xAF,0xFF,0xFF,0x38,
0x21,0xDE,0xEE,0x9F,0xFF,0xBF,0x7F,0xFF,0x3F,0xEF,0x0F,0xB7,0xFF,0xFF,0x07,0xD6,
0x2F,0xFF,0xE7,0xFF,0xC0,0xFF,0xFC,0xFF,0xF0,0xEF,0xBF,0xFF,0xFF,0x41,0x8C,0xCA,
0xBA,0xB9,0xFF,0xFF,0xFF,0xE3,0xFF,0xFD,0xF0,0x6F,0xFF,0xFF,0x93,0xCC,0xDF,0xFF,
0xFE,0x3F,0xFF,0xFE,0x00,0x7F,0xFD,0xF7,0x7F,0xFF,0xFF,0x40,0x03,0x2E,0xEE,0xEF,
0xC2,0x03,0xC0,0xFF,0x9F,0xFD,0xF7,0xAF,0xFF,0xFF,0xC0,0x03,0x3F,0xFF,0xFF,0xF9,
0xFC,0x37,0xFF,0xE3,0xFE,0xE7,0xDF,0xFF,0xFF,0xD1,0xCC,0xFB,0xBB,0xBB,0xE7,0xFF,
0x8F,0xFF,0xFC,0x3E,0x17,0xDF,0xFF,0xFF,0xC0,0x8C,0xFF,0xFF,0xFF,0x9F,0xFF,0xDF,
0xFF,0xFF,0xC6,0xF7,0xEF,0xFF,0xFF,0xC0,0x90,0x2F,0xEF,0xEE,0x7F,0xFF,0xBF,0xFF,
0xFF,0xF9,0xFB,0xF7,0xFF,0xFF,0xC0,0xA0,0x3F,0xFF,0xF9,0xDF,0xFF,0xBF,0xFF,0xDF,
0xFE,0xFB,0xFF,0xFF,0xFF,0x10,0xC0,0x08,0x00,0x00,0x0F,0xFF,0xBF,0xFF,0x80,0x00,
0x00,0x07,0xFF,0xFF,0xE8,0x80,0x7F,0xFF,0xFF,0xF3,0xFF,0xBF,0xFF,0x7F,0xFF,0xFF,
0xFF,0xFF,0xFF,0xE1,0xC0,0x7F,0xFF,0xFF,0xFC,0x7E,0x5F,0xF8,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xF0,0x00,0xFF,0xFF,0xFF,0xFF,0x81,0xE0,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF
};
void delay_ms(uint i)
{
 while(i--);
 }

void showstr()
{
 uint strnum;
 uint stradd=strinf.strstartrow*40+strinf.strstartcol;
 
 Cmdwrite(0x46);//写入初始地址
 Datawrite((uchar)(stradd));//低位
 Datawrite((uchar)(stradd>>8));//高位
 
 Cmdwrite(0x42);
 for(strnum=0;strnum<strinf.strwidth*strinf.strhigh;strnum++)
 {
  if((strnum%strinf.strwidth==0)&&(strnum>0))
   {
    stradd+=40;//第一次的时候是第一行行首,那么下次的时候
                      //是第二行行首,中间差40个字符
    Cmdwrite(0x46);  //依次写入每行的开始地址
    Datawrite((uchar)(stradd));//低位
    Datawrite((uchar)(stradd>>8));//高位
    Cmdwrite(0x42);
    }
  
   if(strnum<strinf.strnum)
   Datawrite(*(strinf.strp+strnum));
   else
   Datawrite(0x00);
 }
}

void showpic(void)
{
 uint picnum;
 uint picadd=picinf.picstartrow*40+(picinf.picstartcol/8)+0x2800;
 
 Cmdwrite(0x46);//写入初始地址
 Datawrite((uchar)(picadd));//低位
 Datawrite((uchar)(picadd>>8));//高位
 
 
 Cmdwrite(0x42);
 for(picnum=0;picnum<(picinf.picwidth/8)*picinf.pichigh;picnum++)
 {
  if((picnum%(picinf.picwidth/8)==0)&&(picnum>0))
   {
    picadd+=40;//第一次的时候是第一行行首,那么下次的时候
                      //是第二行行首,中间差40
    Cmdwrite(0x46);  //依次写入每行的开始地址
    Datawrite((uchar)(picadd));//低位
    Datawrite((uchar)(picadd>>8));//高位
    Cmdwrite(0x42);
    }
   Datawrite(*(picinf.picp+picnum));
 }
}


//--------------写指令代码------------------------------  
void Cmdwrite(unsigned char cmdcode)  
{  
_CS=0;  
AO =1;  
LCD_BUS=cmdcode;  
_RD=1;  
_WR=0;  
_WR=1;  
_CS=0;   
}  
//--------------写数据或参数-----------------------------  
void Datawrite(unsigned char wrdata)  
{  
_CS=0;  
AO =0;  
LCD_BUS=wrdata;  
_RD=1;  
_WR=0;  
_WR=1;  
_CS=0;  
}   
//---------------写入数据-------------------------------  
void Printstr(void)  
{  
unsigned char i;  
Cmdwrite(0x42);  
for(i=0;i<40;i++)  
{  
 Datawrite(strdata[i]);  //写入数据   
}  

}  
//-------------写入字符串--------------------------------  
/*void Printstr( unsigned char  *pstr)  
{  
Cmdwrite(0x42);  
while(*pstr>0)  
  {  
  Datawrite(*pstr);  
  pstr++;  
  }  
}*/   

//--------------整屏幕写入数据---------------------------  
void Fullscreenfill(unsigned char low,unsigned char high, unsigned char fill_data)  
{  
unsigned char i,j;  
Cmdwrite(0x46);  
Datawrite(low);  
Datawrite(high);  
Cmdwrite(0x42);  
for(i=0;i<240;i++)  
   for(j=0;j<40;j++)  
      Datawrite(fill_data);  
}  

void Fullscreenfillt(unsigned char low,unsigned char high, unsigned char fill_data)  
{  
unsigned char i,j;  
Cmdwrite(0x46);  
Datawrite(low);  
Datawrite(high);  
Cmdwrite(0x42);  
for(i=0;i<8;i++)  
   for(j=0;j<40;j++)  
      Datawrite(fill_data);  
} 
//--------------模块初始化-------------------------------  
void LCD_Initial()  
{  
_RES=0;  
delay_ms(100);  
_RES=1;  
delay_ms(100);  

Cmdwrite(0x40);  // 系统设置命令 
Datawrite(0x32); // 1 单屏幕显示,不分为上下两屏
Datawrite(0x87); // 2
Datawrite(0x07); // 3
Datawrite(0x27); // 4    39
Datawrite(0x2b); // 5  
Datawrite(0xef); // 6  0xef=239
Datawrite(0x28); // 7
Datawrite(0x00); // 8

Cmdwrite(0x44);  // 显示区域设置
Datawrite(0x00); // 1 第一显示区域:第一层
Datawrite(0x00); // 2
Datawrite(0xef); // 3 一共240行
Datawrite(0x00); // 4 第二显示区域,第二层
Datawrite(0x28); // 5 关于地址:图形方式下,一次横向显示8位,320*240/8=9600=0x2580,设置为0x2800留够余量
Datawrite(0xef); // 6 一共240行
Datawrite(0x00); // 7 第三显示区域,第三层
Datawrite(0x50); // 8
//Datawrite(0x00); // 9
//Datawrite(0x78); // 10

Cmdwrite(0x58);  //显示关
Datawrite(0x57); //所有显示部分都不闪烁,光标闪烁

Cmdwrite(0x5b);  //设置显示层数和结合方法的命令
Datawrite(0x00); //第二,四层默认为图形显示方法,
                 //第一层设置为字符显示的时候第三层不可用,强行使用的话会造成错误
                 //单屏方式下,SAD1对应第一层,SAD2对应第二层,SAD3对应第三层
                 //本例使用第一层字符,第二层图形
                 //
//Cmdwrite(0x5c);  //设定图形发生器的地址
//Datawrite(0x00);  
//Datawrite(0x78);  

Cmdwrite(0x5d); //字符图形库设置,使用内部字符图形库
Datawrite(0x07); //光标图形为在第8行
Datawrite(0x07); //光标图形为8个点,是一条直线,
//Datawrite(0x87); //光标图形为8*8的方块
 
Cmdwrite(0x4c); //光标自动右移
//Cmdwrite(0x4c); //光标自动左移
//Cmdwrite(0x4c); //光标自动上移
//Cmdwrite(0x4c); //光标自动下移

Fullscreenfill(0x00,0x00,0x00);  
Fullscreenfill(0x00,0x28,0x00);
//Fullscreenfill(0x00,0x50,0x00);

//Fullscreenfillt(0x28,0x28,0xf0);
  

Cmdwrite(0x59);  //显示开
}  
//================================================================  
void main()  
{ 
uchar rolla=0x00;
uint rollb=0; 

delay_ms(200); 

DDRB  =0xff;  
PORTB = 0xff;  
DDRC  =0xff;  
PORTC = 0xFF;
DDRD=0XFF;
PORTC=0XFF;
  
    
_RD=1;  
_WR=1;  
_CS=1;  
AO =1;  
LCD_BUS=0xff;  
LCD_Initial();  




strinf.strstartrow=10;
strinf.strstartcol=13;
strinf.strwidth=12;
strinf.strhigh=3;
strinf.strnum=12;
strinf.strp=strdata;

showstr();

picinf.picstartrow=89;
picinf.picstartcol=90;
picinf.picwidth=120;
picinf.pichigh=56;
picinf.picp=picdata;

showpic();

/*
while(1)
{
Cmdwrite(0x5a);
Datawrite(rolla++&0x07);
for(rollb=0x00;rollb<1000;rollb++)
delay_ms(75);
}
*/
while(1);

 }      
 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -