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

📄 main.c

📁 这是我以前做过的51单片机实验代码
💻 C
📖 第 1 页 / 共 2 页
字号:
0xA4,0x04,0x24,0x04,0x25,0xF4,0x24,0x04,0x3C,0x04,0x24,0x04,0x20,0x28,0x00,0x10
};


unsigned char code HZ3[]=
{
/****************************0(8*16)index=0x00******************************/
0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,
/****************************1(8*16)index=0x01******************************/
0x00,0x00,0x08,0x18,0x28,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x00,0x00,0x00,
/****************************2(8*16)index=0x02******************************/
0x00,0x00,0x3C,0x42,0x42,0x02,0x02,0x04,0x04,0x08,0x10,0x20,0x7E,0x00,0x00,0x00,
/****************************3(8*16)index=0x03******************************/
0x00,0x00,0x3C,0x42,0x42,0x02,0x02,0x1C,0x02,0x02,0x42,0x42,0x3C,0x00,0x00,0x00,
/****************************4(8*16)index=0x04******************************/
0x00,0x00,0x04,0x0C,0x14,0x24,0x24,0x44,0x84,0xFE,0x04,0x04,0x04,0x00,0x00,0x00,
/****************************5(8*16)index=0x05******************************/
0x00,0x00,0x3E,0x20,0x20,0x40,0x7C,0x42,0x02,0x02,0x42,0x44,0x3C,0x00,0x00,0x00,
/****************************6(8*16)index=0x06******************************/
0x00,0x00,0x3C,0x42,0x42,0x40,0x5C,0x62,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,
/****************************7(8*16)index=0x07******************************/
0x00,0x00,0x7E,0x02,0x04,0x04,0x08,0x08,0x08,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
/****************************8(8*16)index=0x08******************************/
0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x3C,0x42,0x42,0x42,0x42,0x3C,0x00,0x00,0x00,
/****************************9(8*16)index=0x09******************************/
0x00,0x00,0x3C,0x42,0x42,0x42,0x42,0x46,0x3A,0x02,0x42,0x42,0x3C,0x00,0x00,0x00,
/**************************百分号("%")(8*16)index=0x0A**********************/
0x00,0x00,0x00,0x44,0xA4,0xA8,0xA8,0xA8,0x54,0x1A,0x2A,0x2A,0x2A,0x44,0x00,0x00,
/****************************冒号(:)(8*16)index=0x0B************************/
0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,0x18,0x18,0x00,0x00,0x00,0x00,
/****************************m(8*16)index=0x0C******************************/
0x00,0x00,0x00,0x00,0x00,0x6C,0x92,0x92,0x92,0x92,0x92,0x00,0x00,0x00,0x00,0x00,
/***************************加号(+)(8*16)index=0x0D*************************/
0x00,0x00,0x00,0x00,0x10,0x10,0x10,0x10,0xFE,0x10,0x10,0x10,0x10,0x00,0x00,0x00,
/***************************横线(-)(8*16)index=0x0E*************************/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/**************************星号(*)(8*16)index=0x0F**************************/
0x00,0x00,0x00,0x00,0x10,0x10,0xD6,0x38,0x38,0xD6,0x10,0x10,0x00,0x00,0x00,0x00,
/**************************小数点(8*16)index=0x10***************************/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x38,0x38,0x38,0x00,0x00,
/**************************空格(" ")(8*16)index=0x11************************/
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
/**************************斜线("/")(8*16)index=0x12************************/
0x00,0x00,0x01,0x02,0x02,0x04,0x04,0x08,0x08,0x10,0x10,0x20,0x20,0x40,0x40,0x00
};

 

void WRITE_D(int D)      //写数据
 {  
  checkbusy();
   cd=0;
  ce=1;
  ce=0;
  rd=1;
  wr=0;
  P2=D;
  wr=1;
  ce=1;


 }

void WRITE_C(int C)      //写命令
 {   
   checkbusy();
  cd=1;
  ce=1;
  ce=0;
  rd=1;
  wr=0;
  P2=C;
  wr=1;
  ce=1;
 }

void COM_1(int D1,int C1)  //单参数函数
 {
  WRITE_D(D1);
  WRITE_C(C1);
 }

void COM_2(int D1,int D2,int C1) //双参数函数
 {
  WRITE_D(D1);
  WRITE_D(D2);
  WRITE_C(C1);
 }

void COM_0(int C1)       //无参数指令
 {
  WRITE_C(C1);
 }


void ClearScreen(void)
 {
  unsigned char i,j;
  COM_2(0x00,0x00,0x24);//图形地址指针设置
  for(i=0;i<128;i++)//128行
  {
   for(j=0;j<30;j++)//每行30个字节
   {
    COM_1(0x00,0xC0);//数据写,地址指针加1
   }
  }
  COM_2(0x00,0x10,0x24);//文本地址指针设置
  for(i=0;i<128;i++)
   {
   for(j=0;j<30;j++)
    {
     COM_1(0x00,0xC0);//数据写,地址指针加1
    
    }
   }
 }

void initlcd(void)   //初始化
 {
   rst=0;      //reset
        delay(10); //delay 10ms
        rst=1;
            COM_0(0x90);//显示关
  COM_2(0x00,0x10,0x40); //设置文本区首地址
  COM_2(0x1E,0x00,0x41); //设置文本区域(宽度)
  COM_2(0x00,0x00,0x42); //设置图形首地址
  COM_2(0x1E,0x00,0x43); //设置图形区域(宽度)
  COM_0(0x88);           //CGRAM方式,OR模式
  //COM_2(0x10,0x06,0x21); //设置光标指针
  //COM_2(0x00,0x00,0x22); //CGRAM偏置地址寄存器设置
  //COM_2(0x00,0x00,0x24); //地址指针设置,设置将要进行操作的显示缓冲区(RAM)的一个单元地址  
  //COM_0(0xA0);           //设置光标一行
   COM_0(0x9F);           //图形显示开,文本显示开,光标显示开,光标闪烁开
 }

 

void ShowHZB(unsigned char line,unsigned char column,unsigned char indexB) //正显示16*16
 {
  unsigned char add_h,add_l;
  unsigned int addr;
  unsigned int StartAddr;
  StartAddr=line*30+column;  //定位起始行
  addr=indexB*16;        //code 储存地址,即字符代码地址

  while(addr<(indexB+2)*16)     //每次写32个字节
   {
    add_l=StartAddr%(0x0100); //低位地址
    add_h=StartAddr/(0x0100); //高位地址
    COM_2(add_l,add_h,0x24); //定位当前操作位置
    COM_1(HZ2[addr],0xc0);        //向当前操作位置写入要显示的内容,左半部分
    COM_1(HZ2[addr+1],0xc0);      //向当前操作位置写入要显示的内容,右半部分
    COM_0(0x9F);                  //图形显示开,文本显示开,光标显示开,光标闪烁开
    addr++;
    addr++;   //使字符代码指针指向下一要写入的字节
    StartAddr=StartAddr+30;  //每行30个字节,本指令使指针指向将要写入汉字(显示缓存)的下一行
   }
  StartAddr=0;  //写完一个汉字(16行)后,起始行复0
 }

void R_ShowHZB(unsigned char line,unsigned char column,unsigned char indexB) //反显示16*16
 {
  unsigned char add_h,add_l,dat;
  unsigned int addr;
  unsigned int StartAddr;
  StartAddr=line*30+column;  //定位起始行
  addr=indexB*16;    //code 储存地址
   while(addr<(indexB+2)*16)
    {
     add_l=StartAddr%(0x0100);   //低位地址
     add_h=StartAddr/(0x0100);   //高位地址
     COM_2(add_l,add_h,0x24);   //定位当前操作位置
     dat=HZ2[addr];
     dat=~dat;
     COM_1(dat,0xc0);
     dat=HZ2[addr+1];
     dat=~dat;
     COM_1(dat,0xc0);
     COM_0(0x9F);   //图形显示开,文本显示开,光标显示开,光标闪烁开
     addr++;
     addr++;
     StartAddr=StartAddr+30;
    }
  StartAddr=0;
 }

void Showchar(unsigned char line,unsigned char column,unsigned char index) //显示字符8*16
 {
  unsigned char add_h,add_l;
  unsigned int addr;
  unsigned int StartAddr;
  StartAddr=line*30+column;    //定位起始行
  addr=index*16;      //code 储存地址
   while(addr<(index+1)*16)
    {
     add_l=StartAddr%(0x0100);   //低位地址
     add_h=StartAddr/(0x0100);   //高位地址
     COM_2(add_l,add_h,0x24);   //定位当前操作位置
     COM_1(HZ3[addr],0xc0);
     COM_0(0x9F);
     addr++;
     StartAddr=StartAddr+30;
    }
  StartAddr=0;
 }

void R_Showchar(unsigned char line,unsigned char column,unsigned char index) //反显示8*16
 {
  unsigned char add_h,add_l,dat;
  unsigned int addr;
  unsigned int StartAddr;
  StartAddr=line*30+column;  //定位起始行
  addr=index*16;    //code 储存地址
   while(addr<(index+1)*16)
    {
     add_l=StartAddr%(0x0100);   //低位地址
     add_h=StartAddr/(0x0100);   //高位地址
     COM_2(add_l,add_h,0x24);   //定位当前操作位置
     dat=~HZ3[addr];
     COM_1(dat,0xc0);
     COM_0(0x9F);
     addr++;
     StartAddr=StartAddr+30;
    }
  StartAddr=0;
 }

 

 
void checkbusy(void)
     {
  unsigned char data0;
  cd=1;
   ce=1;
  ce=0;
  rd=0;
  wr=1;
  data0=P2;
   rd=1;
  ce=1;
     while((data0&0x03)!=0x03);
     }  


void delay(unsigned int t)
     {
     while(t!=0) t--;     //t=10,10us
     }

 

void main(void)     //主程序
{   
 fs=0;            //font select ,H:6x8,L:8x8
 initlcd();       //初始化
 ClearScreen();  //清屏
      ShowHZB(0,2,0x00);
    //  R_Showchar(0,2,0x00);
    //ShowHZB(32,23,0x02);
 while(1);

} 

⌨️ 快捷键说明

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