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

📄 lcm09cy2.c

📁 CUP芯片c8051F005,型号为LCM09CY的8段式段式显示器显示程序
💻 C
字号:
#include "C:\Cygnal\IDEfiles\C51\Inc\c8051F000.h"
#define NUM    10
sbit	DATA=P3^2;
sbit	WR=P3^1;
sbit	CS=P3^0;
unsigned char xdata gval;
unsigned char xdata gaddr;
unsigned char gdot=0;
unsigned char gptr=0;
unsigned char xdata gbuf[]="35.79";
unsigned char xdata gnum[]={0x7d,0x05,0x5b,0x1f,0x27,0x3e,0x7e,0x15,0x7f,0x3f};
void delay(unsigned long i);
void port_init(void);
void lcd_init(unsigned int command);
void sysclock_init(void);
void wr_data(unsigned char dat);
void wr_com_addr(unsigned char com,unsigned char addr);
void clear_screen(void);
void disp_data(unsigned char value);
void display(unsigned char addr,unsigned char dat);


void main(void)
{
	EA=0;
	WDTCN=0x0de;
    WDTCN=0x0ad;
	EA=1;
	port_init();
	//sysclock_init();
	lcd_init(0x0848);         //初始化	
	lcd_init(0x0802);        //开振荡器
	lcd_init(0x0806);        //开显示器
	clear_screen();
	gaddr=25;
	while(gbuf[gptr]!=0)
	{
		if(gbuf[gptr]=='.')
		{
			gdot=1;
			gptr++;
			continue;
		}	

		if(gdot==1)
		{
			disp_data(gbuf[gptr++]);
			gval|=0x80;
			display(gaddr,gval);
			gaddr+=4;
			gdot=0;
		}
		else
		{
			disp_data(gbuf[gptr++]);
			display(gaddr,gval);
			gaddr+=4;		
		}

	}


	while(1);

}  	


void lcd_init(unsigned int com)
{
	unsigned char i;
	com<<=4;
	CS=1;
	delay(NUM);
	WR=1;
	delay(NUM);
	CS=0;
	delay(NUM);
	for(i=0;i<12;i++)
	{
		WR=0;
		delay(NUM);
		DATA=(bit)(com&0x8000);
		com<<=1;
		WR=1;
		delay(NUM);
	}
	CS=1;
	delay(NUM);

}

void port_init(void)
{
	XBR0=0x85;      //CP0,UATR,SMB0           
	XBR1=0;
	XBR2=0x40;     //弱上拉允许 
	PRT0CF=0x1f;   
	PRT3CF=0x07;
   
}

void delay(unsigned long i)
{
	while(i--);


}

void sysclock_init(void)
{
	unsigned int i;
    OSCXCN=0x65;             //晶体振荡器方式1分频,fsysclock=1.8432mhz;
    for(i=0;i<5000;i++);     //延时1ms
	while(!(OSCXCN&0x80));   //检查XTLVLD=1?
    OSCICN=0x08;             //切换到外部振荡器
}


void wr_com_addr(unsigned char com,unsigned char addr)
{
	unsigned char i;
	com<<=5;
	addr<<=2;
	CS=1;
	delay(NUM);
	WR=1;
	delay(NUM);
	CS=0;
	delay(NUM);
	for(i=0;i<3;i++)
	{
		WR=0;
		delay(NUM);
		DATA=(bit)(com&0x80);
		com<<=1;
		WR=1;
		delay(NUM);
	}

	for(i=0;i<6;i++)
	{
		WR=0;
		delay(NUM);
		DATA=(bit)(addr&0x80);
		addr<<=1;
		WR=1;
		delay(NUM);
	}

}

void wr_data(unsigned char dat)
{
	unsigned char i;
	for(i=0;i<4;i++)
	{
		WR=0;
		delay(NUM);
		DATA=(bit)(dat&0x80);
		dat<<=1;			
		WR=1;
		delay(NUM);
	}

	CS=1;
	delay(NUM);			
	
}

void clear_screen(void)      //清屏
{
	unsigned char i,j=48;
	unsigned char dat;
	wr_com_addr(0x05,0x00);
	while(j--)
	{
		dat=0;
		for(i=0;i<4;i++)
		{
			WR=0;
			delay(NUM);
			DATA=(bit)(dat&0x80);
			dat<<=1;			
			WR=1;
			delay(NUM);
		}	
		
	}
	CS=1;
	delay(NUM);

}






void disp_data(unsigned char value)
{
	switch(value)
	{
	case '0':	gval=gnum[0];break;	
	case '1':	gval=gnum[1];break;
	case '2':	gval=gnum[2];break;
	case '3':	gval=gnum[3];break;
	case '4':	gval=gnum[4];break;
	case '5':	gval=gnum[5];break;
	case '6':	gval=gnum[6];break;
	case '7':	gval=gnum[7];break;
	case '8':	gval=gnum[8];break;
	case '9':	gval=gnum[9];break;
	default	:	break;
	}

}





void display(unsigned char addr,unsigned char dat)
{
	wr_com_addr(0x05,addr);
	wr_data(dat);
	addr+=2;
	dat<<=4;
	wr_com_addr(0x05,addr);
	wr_data(dat);

}
			
/*	while(gbuf[gptr]!=0)
	{	
		if(gbuf[gptr]=='.')
		{
			gdot=1;
			gptr++;
			continue;	
		}
		
		if(gdot==1)
		{
			disp_data(gbuf[gptr++]);
			gval|=0x80;
			wr_com_addr(0x05,gaddr);
			wr_data(gval);
			gval<<=4;
			gaddr+=2;
			wr_com_addr(0x05,gaddr);
			wr_data(gval);
			gaddr+=2;
			gdot=0;
		}
		else
		{
			disp_data(gbuf[gptr++]);
			wr_com_addr(0x05,gaddr);
			wr_data(gval);
			gval<<=4;
			gaddr+=2;
			wr_com_addr(0x05,gaddr);
			wr_data(gval);
			gaddr+=2;	
		}
		
	}
*/	

⌨️ 快捷键说明

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