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

📄 lcd4.c

📁 这是一个秒表程序,可以设置时分,走时准确,并带液晶显示.
💻 C
字号:
//icflashman编写,欢迎交流,QQ28479691
#include <pic.h>				
#define uint unsigned int
#define uchar unsigned char

//-------------------------------------------
//LCD数据口定义
#define RS  RB1
#define E   RA5
#define LCDBUS  PORTB                  // LCD数据口

//------------------------------------------
//LCD子函数定义
uchar BCD[7];			//十位二进制的显示码分别是千百十个位的显示
void LcdInit( void );                    // 初始化 LCD
void WrDat( unsigned char data );		 // 写数据到 LCD
void WrOp( unsigned char cmd );  		 // 写命令到 LCD
void BLedEn(void);						 //打开背光
void ShowLong(uchar addr,long num);
void ShowByte(uchar addr,uchar num);
void DisText(uchar addr,const uchar *p);
//------------------------------------------
//其他子函数定义
void delayms(uint t);
void Init_System(void);

//------------------------------------------
//LCD子函数
void LcdInit( void )                      
{ // 初始化 LCD 显示 
    PORTB = 0xC1;                         
    TRISB = 0xC1;                       
    TRISA = 0xDF;

	WrOp(0x38);
    WrOp( 0x28 );                  // 
    WrOp( 0x0C );                  // 开显示
    WrOp( 0x06 );                  // 设置指针移动方式
    WrOp( 0x01 );                  // 清屏            
}

void WrOp(uchar cmd )     // 写命令到LCD子程序
{
    LCDBUS &=0xc3;		//11000011  
    LCDBUS |= ( ( cmd >>2 ) & 0x3C );          // 送高4位
    RS = 0;                                 // 设置为发送命令格式
    E = 1;                                  // 发送信号,下降沿触发
	NOP();
	NOP();
    E = 0; 
    LCDBUS &=0xc3 ;                                 // 
    LCDBUS |= ( ( cmd <<2 ) & 0x3C );          // 送低4位
    E = 1;                                  // 发送信号,下降沿触发
	NOP();
	NOP();
    E = 0;                                  // 
    delayms(1);                             //  
}


void WrDat(uchar data )   // 写数据到LCD的子程序
{
    LCDBUS &= 0xc3; 
    LCDBUS |= ( ( data >>2 ) & 0x3C );      // 送高4位
    RS = 1;                                 // 设置为发送数据格式
    E = 1;                                  // 
	NOP();
	NOP();                                  //
    E = 0;                                  // set enable low
    LCDBUS &= 0xc3; 
    LCDBUS |= ( ( data <<2 ) & 0x3C );      // 送低4位
    E = 1;                                  
	NOP();
	NOP();                              
    E = 0;                                 
    delayms(1);                             
}

void BLedEn(void)
{//打开背光
	ADCON1=0x06;
	TRISE0=0;
	RE0=0;
}

void DisText(uchar addr,const uchar *p)
{//在ADDR处起显示p指向的字符串
	WrOp(addr);
	while(*p !='\0')WrDat(*(p++));
}

void ShowLong(uchar addr,long num)			//在addr處顯示數位num
{//將num轉化成五個BCD碼存放在全局陣列BCD[5]中
	uchar i;
	num%=1000000;
	for(i=6;i>0;i--)       //將NUM資料轉化成ASCII碼,如521會轉化爲00521
	{
       	  BCD[i-1]=(uchar)(num%10+0x30);     //取出最低位
       	  num/=10;                           //去掉最低位
    }
    i=0;
	while(BCD[i] ==0x30 && i<5) BCD[i++]=' ';    //NUM轉換成陣列存放,但還沒有加上小數點
	BCD[6]='\0';
	DisText(addr,BCD);
}
void ShowByte(uchar addr,uchar num)
{//将num转化成五个BCD码存放在全局数组BCD[5]中
	uchar i;
	for(i=3;i>0;i--)       //将NUM数据转化成ASCII码,如521会转化为00521
	{
       	  BCD[i-1]=(uchar)(num%10+0x30);     //取出最低位
       	  num/=10;                           //去掉最低位
    }
    i=0;
	while(BCD[i] ==0x30 && i<2) BCD[i++]=' ';    //NUM转换成数组存放,但还没有加上小数点
	BCD[3]='\0';
	DisText(addr,BCD);
}

//--------------------------------------------------
//其他函数
void delayms(uint t)
{//延时约t个ms,4M晶振,一个指令1us
	uchar i;
	for(;t>0;t--)
		for(i=0;i<250;i++);
}

void Init_System(void)
{//系统初始化
	BLedEn();
	LcdInit();				
	GIE = 0;			
}

const uchar tab[]={"GoldenChip Demo"};
//--------------------------------------------------
//主函数
void main( void )
{
	uchar t;
	Init_System();
	DisText(0x80,tab);
	ShowLong(0xc0,123456);
	while(1)
	{
		ShowByte(0xCa,t++);
		delayms(1000);
	}
}


⌨️ 快捷键说明

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