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

📄 display.c

📁 用单片机实现的频率计,使用的是STC12系列的单片机,兼容51系列,可以测试频率到2M左右,液晶显示出频率,这里使用的晶振是24M的.用户可以自行修改并修正延时值
💻 C
字号:
/********************************************************************
 *  程序功能 :  中央运算单元测试 LCD 现实单元
 *                                                                         
 *  应用软件 :  KEIL C                                               
 *                                                                      
 *  版    本 :  KEIL 8.02 
 *                                                         
 *  硬    件 :  STC89C58RD+   
 *                                                               
 *  创建时间 :  2007-09-28
 *              
 *  创 建 人 :   吕坤    
 *                        
 ********************************************************************/  
/*  说    明 :

    这里已经定义好了lcd的数据输出针脚,现在默认是使用P0口,如果需要修改,请打开diaplay.h文件自行修改
	外部调用时可以使用以下方法:
	例:
	charadds(123);    				LCD显示 123
	WriteDataLCD('-') 				LCD现实  -
	WriteCommandLCD(0XC0);			将光标指定到第二行第一个字符处开始显示
    WriteCommandLCD(0X06);			将光标指定到第一行第一个字符处开始显示
    WriteCommandLCD(0x01); 			显示清屏
*/
#include<reg52.h>
#include<math.h>

#define LCD_Data P1		//LCD数据与控制线

sbit LCD_RS=P2^2;		//液晶控制  
sbit LCD_RW=P2^1;	 	//液晶写入
sbit LCD_E=P2^0;	  	//液晶使能

unsigned int place[6];




void Delay5Ms(void); 						//命令延时程序
void LCDInit(void);     					//LCD初始化程序
void charadds(unsigned int a) ;		//将整形数据拆解成char数组并送显
void WriteDataLCD(unsigned char WDLCD);	    //想LCD发送数据
void WriteCommandLCD(unsigned char WCLCD);	//向LCD发送命令
/********************LCD初始化**********************/
			 
void LCDInit(void) 
{
	LCD_Data = 0x00;
	WriteCommandLCD(0x38);  
	Delay5Ms(); 														   
	WriteCommandLCD(0x38); //显示模式设置,开始要求每次检测忙信号		   
	WriteCommandLCD(0x08); //关闭显示				 	 
	WriteCommandLCD(0x06); // 显示光标移动设置	  	  		 
	WriteCommandLCD(0x01); //显示清屏	 
	WriteCommandLCD(0x0C); // 显示开及光标设置	 	   
}

/********************LCD命令执行********************/

void WriteCommandLCD(unsigned char WCLCD) 		  
{
	Delay5Ms();
	LCD_Data = WCLCD;
	LCD_RS = 0;
	LCD_RW = 0; 
	LCD_E = 1; 
	Delay5Ms();   
	LCD_E = 0; 
}

/********************LCD数据发送********************/

void WriteDataLCD(unsigned char WDLCD)
{
	Delay5Ms();
	LCD_Data = WDLCD;
	LCD_RS = 1;
	LCD_RW = 0;
	LCD_E = 1;   
	Delay5Ms();
	LCD_E = 0; 
}

/********************延时***************************/

void Delay5Ms(void)
{
	unsigned int TempCyc = 3000;
	for(;TempCyc>0;TempCyc--);
}

/********************整形转char型并送显**************/

void charadds(unsigned int a) 
{
   unsigned long c,p=0;
   if(a==0) 
   {
   		WriteDataLCD('0');
		return ;	
   }
   c=a/1000000000;
   if(c!=0)
   {
   		WriteDataLCD(c+0x30);			  //将转换后的数字送入LCD显示
    	p=1;
    }
    c=(a%1000000000)/100000000;
    if(c!=0 || p==1)
    {									   //将转换后的数字送入LCD显示
		WriteDataLCD(c+0x30);			   //c+30 是为了使LCD现实字符型的数字符号,这里将个位数字转换成了asc码
	    p=1;
    }
    c=(a%100000000)/10000000;
    if(c!=0 || p==1)
    {
		WriteDataLCD(c+0x30);				//将转换后的数字送入LCD显示
	    p=1;
    }
    c=(a%10000000)/1000000;
    if(c!=0 || p==1)
    {										//将转换后的数字送入LCD显示
		WriteDataLCD(c+0x30);
	    p=1;
    }
    c=(a%1000000)/100000;
    if(c!=0 || p==1)
    {
		WriteDataLCD(c+0x30);				//将转换后的数字送入LCD显示
	    p=1;
    }
    c=(a%100000)/10000;
    if(c!=0 || p==1)
    {
		WriteDataLCD(c+0x30);				//将转换后的数字送入LCD显示
	    p=1;
    }               
    c=(a%10000)/1000;
    if(c!=0 || p==1)
    {
		WriteDataLCD(c+0x30);				//将转换后的数字送入LCD显示
	    p=1;
    }                
    c=(a%1000)/100;
    if(c!=0 || p==1)
    {
		WriteDataLCD(c+0x30);				//将转换后的数字送入LCD显示
	    p=1;
    }
    c=(a%100)/10;
    if(c!=0 || p==1)
    {
		WriteDataLCD(c+0x30);				//将转换后的数字送入LCD显示
    }            
    c=a%10+0x30;
    WriteDataLCD(c);						//将转换后的数字送入LCD显示    
}

⌨️ 快捷键说明

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