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

📄 c8051f120display.c

📁 一个用c8051f120与12864的中文液晶显示的测试程序
💻 C
字号:
/*-----------------------------------------*/
#include <c8051f120.h>                 // SFR declarations
#include <stdio.h>      
#include <string.h>
#include <absacc.h>
#define uint  unsigned int                       //简化定义  
#define uchar unsigned char
#define comm  0
#define dat   1

/*-------------函数定义-------------------*/
void Port_IO_Init();
void Oscillator_Init();
void Init_Device(void);
void wr_lcd (uchar dat_comm,uchar content);
void write_clock(unsigned char ord, unsigned char dd);
void delay (uint us);
void delay1 (uint ms);
extern bit   RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,unsigned char ControlByte);
/*-------------引脚定义---------------------*/
sbit cs   = P4^7;
sbit std  = P4^5;
sbit sclk = P4^6;
sbit led = P7^6;
sbit out1=P2^7;
sbit out2=P2^6;
sbit out3=P2^5;
/*------------------初始化-----------------*/
void Port_IO_Init()
{
    SFRPAGE   = CONFIG_PAGE;
    P1MDOUT   = 0x40;
    XBR2      = 0x40;
}

void Oscillator_Init()
{
   int i = 0;
    SFRPAGE   = CONFIG_PAGE;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    OSCICN    = 0x83;
    PLL0CN    = 0x04;
    CCH0CN    &= ~0x20;
    SFRPAGE   = LEGACY_PAGE;
    FLSCL     = 0xB0;
    SFRPAGE   = CONFIG_PAGE;
    CCH0CN    |= 0x20;
    PLL0CN    |= 0x01;
    PLL0DIV   = 0x01;
    PLL0FLT   = 0x01;
    PLL0MUL   = 0x04;
    for (i = 0; i < 15; i++);  // Wait 5us for initialization
    PLL0CN    |= 0x02;
    while ((PLL0CN & 0x10) == 0);
    CLKSEL    = 0x02;
}

void init_cpu(void)
{
  Oscillator_Init();
  Port_IO_Init();
  wr_lcd (comm,0x30);  /*30---基本指令动作*/   
  wr_lcd (comm,0x01);  /*清屏,地址指针指向00H*/
  wr_lcd (comm,0x06);  /*光标的移动方向*/
  wr_lcd (comm,0x0c);  /*开显示,关游标*/
                                             }

/*----------------显示整数-----------------*/ 
void disnum(uint i,uchar stradd)
{	
    unsigned char thou,hun,ten,ge;
	wr_lcd (comm,0x06);
    thou=i/1000;
	hun=i%1000/100;
	ten=i%100/10;
	ge=i%10;
    wr_lcd (comm,stradd);	   //显示地址
	if (thou==0) wr_lcd (dat,0x20|thou);
    else wr_lcd (dat,0x30|thou);
	if (thou==0&&hun==0) wr_lcd (dat,0x20|hun);
	else wr_lcd (dat,0x30|hun);
	if (thou==0&&hun==0&&ten==0) wr_lcd (dat,0x20|ten);
	else wr_lcd (dat,0x30|ten);
	wr_lcd (dat,0x30|ge); 
}
/*----------------显示整数2-----------------*/ 
void disnum2(uchar ii,uchar strad)
{	
    unsigned char ten,ge;
	ten=ii/10;
	ge=ii%10;
    wr_lcd (comm,strad);	   //显示地址
	wr_lcd (dat,0x30|ten);
	wr_lcd (dat,0x30|ge); 
}
/*----------开机画面-------------------------------*/
uchar code tab0[]={
"  山西华鑫电器  " 
"电话:03537042431"
"阳泉市四矿煤山路"
"传真:03537042431"
};
/*---------------显示汉字或字符----------------*/
void chn_disp (uchar code *chn)
{
  uchar i,j;
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x80);
  for (j=0;j<4;j++)
  {
    for (i=0;i<16;i++)
    wr_lcd (dat,chn[j*16+i]);
  }
}
/*--------------清DDRAM------------------*/
void clrram (void)
{
  wr_lcd (comm,0x30);
  wr_lcd (comm,0x01);
  delay1 (5);
}
/*---------------------------------------*/
void wr_lcd (uchar dat_comm,uchar content)
{
  uchar a,i,j;
  delay1(20);
  a=content;
  cs=1;
  delay(4);
  sclk=0;
  delay(4);
  std=1;
  delay(4);
  for(i=0;i<5;i++)
  {
    sclk=1;
	delay(4);
    sclk=0;
	delay(4);
               }
   std=0;
  delay(4);
  sclk=1;
  delay(4);
  sclk=0;
  delay(4);
  if(dat_comm)
   {  
     std=1;   //data
	delay(4);
  }
    else
	{
      std=0;   //command
	   delay(4);
	   }
     sclk=1;
    delay(4);
    sclk=0;
    delay(4);
    std=0;
    delay(4);
    sclk=1;
    delay(4);
    sclk=0;
    delay(4);
  for(j=0;j<2;j++)
  {
    for(i=0;i<4;i++)
    {
        a=a<<1;
        std=CY;
	    delay(4);
        sclk=1;
	    delay(4);
        sclk=0;
	    delay(4);
    }
      std=0;
	  delay(4);
    for(i=0;i<4;i++)
    {
        sclk=1;
	    delay(4);
        sclk=0;
	    delay(4);
    }
  }
}
/*-----------延时子程序------------------------*/
void delay (uint us)   //微秒
{
  while(us--);
}
void delay1 (uint ms)	//毫秒
{
  uint i,j;
  for(i=0;i<ms;i++)
  for(j=0;j<15;j++)
  delay(10);
}
/*------------------主程序--------------------*/
void main ()
{ 
   WDTCN = 0xde;                       // Disable watchdog timer
   WDTCN = 0xad;
   init_cpu( );
   clrram(); 
   chn_disp (tab0); 
   out1=0;
   out2=0;
   out3=1;
   while(1){
             led=~led	;
			 delay1(1000);
		                    }

						 }
                     




⌨️ 快捷键说明

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