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

📄 1602.c

📁 用C8051F310实现LCD1602的显示
💻 C
字号:
#include <C8051f310.h> 
#define SYSCLK 24500000
#define std  65536-1*(SYSCLK/12000)	  //初值1ms
#define uchar unsigned char
#define uint unsigned int
sbit LCM_RS = P2^0; 
sbit LCM_RW = P2^1;
sbit LCM_E = P2^2;
uchar sec,minu;		//定义分钟和秒
uint count;
uchar xdata table[]="Used time: ";
//=============================子程序声明
void delay(uint z);
void init(void);
void write_data(uchar date);
void write_com(uchar com);
void disp(void);
void lcd_init();
void timer0_init(void) ;
void init()
{	
	OSCICN=0x83;
	CLKSEL=0x00;
	PCA0MD &= ~0x40;
	PCA0MD= 0x00;
	XBR0=0x00;
	XBR1=0x40;
	//P2MDIN |=0xee;
	P2MDOUT |=0x07;
	//P0MDIN |=0x0f;
	P0MDOUT |=0x00;
	
}
void delay(uint z)	//延时
{
	uint x,y;
	for(x=z;x>0;x--)
		for(y=300;y>0;y--);
}


void write_com(uchar com) //写命令
{
	delay(10);
	LCM_RS=0;
	LCM_RW=0  ;
	LCM_E=0;
	P0=com;
	delay(5);
	LCM_E=1;			   
	delay(5);		 	 
	LCM_E=0;
}							  

void write_data(uchar date)      //写数据
{
	delay(10);
	LCM_RS=1;
	LCM_RW=0;
	LCM_E=0;
	P0=date;
	delay(5);
	LCM_E=1;
	delay(5);
	LCM_E=0;
}

void lcd_init()   //lcd初始化
{
	delay(10);
	write_com(0x38);  
	write_com(0x06);   //Mode set  显示右移
	write_com(0x0c);  //开屏幕,开光标,不闪烁
	write_com(0x01);   //清屏
	delay(5);
}
void  disp(void)
{	 unsigned char i,a,b,c,d;
     a=minu/10;
	 b=minu%10;
	 c=sec/10;
	 d=sec%10;
	 write_com(0x80);				
	 while(table[i] != '\0')
       {
        write_data(table[i]);//显示字符
        i++;	
       }
	  write_com(0x8b);
      write_data(0x30+a);
      write_data(0x30+b);
	  write_data(':');
   	  write_data(0x30+c);
	  write_data(0x30+d);			
}
void timer0_init(void)
 {
  CKCON=0x00;	   //使用系统时钟不分频
  //TMOD&=~0x0f;
  TMOD=0x01;	   //16位定时方式
  TL0= std;
  TH0=std>>8;	 //定时1ms
  ET0=1;
  TR0=0;
 }
 
//=============================//主程序
void main(void)
{
	
	init();
	lcd_init();
	timer0_init();
    TR0=1;
    EA=1;
	while(1)
	{ 
	disp( );
    }	
	
}

void timer0_isr(void) interrupt 1  using 0
{
TF0=0;
TL0+=std;
TH0=std>>8;		 //重装初值
count++;
if(count==1000)
{count=0; 
 sec++;
 if(sec==60)
   {sec=0;
    minu++;
    if(minu==60)
	  minu=0; 
  }
 }
}  
							

⌨️ 快捷键说明

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