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

📄 asad.c

📁 很有用的CYGNAL C语言程序,
💻 C
字号:
////////////////LCD测试程序//////////////////////
#include<c8051f020.h>
#include<stdio.h>
#define uchar unsigned char;
#define uint unsigned int;
sbit A0=P2^0;    //硬件接口控制
sbit E1=P2^1;
sbit E2=P2^2;

void delay(unsigned int i)
  {
   unsigned char k=200 ;
   while(i>0)
   {
     i--;
   }
   while(k>1)k--;
   }

void OutMI(unsigned int i ) //发指令i到主窗口
{
A0=0;
delay(5);
E1=1;     //左页
delay(10);
P1=i;
delay(5);
E1=0;  
}
void OutMD(unsigned int i)  //发数据i到主窗口
{
A0=1;
delay(5);
E1=1;     //左页
delay(10);
P1=i;
delay(5);
E1=0;  
}
void OutSI(unsigned int i)  //发指令i到从窗口
{
A0=0;
delay(5);
E2=1;     //右页
delay(10);
P1=i;
delay(5);
E2=0;  
} 
void OutSD(unsigned int i)  //发数据i到从窗口
{
A0=1;
delay(5);
E2=1;     //右页
delay(10);
P1=i;
delay(5);
E2=0;  
}
void lcdini(void)           //12232点阵液晶初始化
{
OutMI(0XE2);OutSI(0XE2);   //复位
OutMI(0XAE);OutSI(0XAE);   //POWER SAVE
OutMI(0XA4);OutSI(0XA4);   //动态驱动
OutMI(0XA9);OutSI(0XA9);   //1/32占空比
OutMI(0XA0);OutSI(0XA0);   //时钟线输出
OutMI(0XEE);OutSI(0XEE);   //写模式
OutMI(0X00);OutSI(0X00);   //设置起始列
OutMI(0XC0);OutSI(0XC0);   //设置起始行
OutMI(0XAF);OutSI(0XAF);   //开显示	

void SetPage(uchar page0,uchar page1)  //同时设置主从显示页为0~`3页
{
OutMI(0xB8|page1);OutSI(0xB8|page0);
}
void SetAddress(uchar address0,uchar address1)    //同时设置主从列地址为0~121
{
OutMI(address1);OutSI(address0);
}
void config(void){
     WDTCN=0xDE;  //看门狗禁止
     WDTCN=0xAD;
     XBR0=0x00;      
     XBR1=0x00;    
     XBR2=0x40;       //Crossbar交叉开关配置使能
     P1MDOUT=0x00;    //端口配置,P1,P2为开漏
     P2MDOUT=0x00;
     P1MDIN=0xFF;     //P1,P2端口为数字输入
     P2MDIN=0xFF;
     CLKSEL=0x00;
     OSCXCN=0x00;
     OSCICN=0x84;     //采用内部晶振,为2 MHz 
} 
void PutCharR(uchar ch)    //左页当前地址
{
OutSD(ch);
} 
void PutCharL(uchar ch)    //右页当前地址
{
OutMD(ch);
} 
void clrscr(void)     //清屏
{
uchar i;
uchar page;
for(page=0;page<4;page++)
{
SetPage(page,page);
SetAddress(0,0);
for(i=0;i<61;i++){
PutCharR(0);PutCharL(0);
   }
  }
}

void Draw_word(uchar d_where,unit x_add,bit layer,uchar width)
{
uchar x,i=0,address;    //address表示显存的物理地址
uchar page=0;       //page表示上下两页
bit window=0;       //window表示左右两页
//putcharR   //右边
//putcharL    //左边
d_where=d_where*32;
for (x=width;x>1;x--)
{
if (x_add>60)  {windows=1;address=x_add%61;}
else address=x_add;
if(layer=0)    //显示一行八个字
    {
     SetPage(0,0);
     SetAddress(address,address);
     if(windows=1)PutCharR(bmp001[d_where]);  //右边
     else	PutCharL(bmp001[d_where]);  //左边	
     SetPage(1,1);
     SetAddress(address,address);
     if(windows=1)PutCharR(bmp001[d_where+width]);  
     else	PutCharL(bmp001[d_where+width]);  	
     }
else        //显示第二行八个汉字

     { 
     SetPage(2,2);
     SetAddress(address,address);
     if(windows=1)PutCharR(bmp001[d_where]);  //右边
     else	PutCharL(bmp001[d_where]);  //左边
	 SetPage(3,3);
     SetAddress(address,address);
     if(windows=1)PutCharR(bmp001[d_where+width]);  
     else	PutCharL(bmp001[d_where+width]);  
      }
    x_add++;
    d_where++;
 }
} 
void main()
{
lcdini(void);
clrscr(void);
config(void)
Draw_word();
while(1);
}
unsigned char code bmp001[]=                                         
{
/----文字 :天--- /
/ --- 宋体12;此字体下对应的点阵为:宽*高=16*16---  /
0x00,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x06,0x01,0x02,0x04,0x08,0x10,0x30,0x60,0x20,0x00,
/---文字 :天---* /
/ *---- 宋体12;此字体下对应的点阵为:宽*高=16*16---*  /
0x00,0x40,0x42,0x42,0x42,0x42,0x42,0xFE,0x42,0x42,0x42,0x42,0x42,0x42,0x40,0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x06,0x01,0x02,0x04,0x08,0x10,0x30,0x60,0x20,0x00,
}

⌨️ 快捷键说明

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