main.c

来自「菜鸟,详细NRF24E1运用,程序,电路」· C语言 代码 · 共 184 行

C
184
字号
/*************************************/
#include "reg51.h"
#include "intrins.h"
/*************************************/
#define uint     unsigned int
#define uchar    unsigned char
#define Dat        0x00
#define Cmd        0x01
/*************************************
#define DIO        P00
#define SCLK       P01
#define CS         P02
#define RESET      P03	  
*************************************/

sbit DIO   =     P0^0 ;
sbit SCLK  =     P0^1 ;
sbit CS    =     P0^2 ;
sbit RESET =     P0^3 ;
#define Enableint  do{EA=1;}while(0)
#define Disableint do{EA=1;}while(0)
/**************************************/
typedef enum  YON{false,true}bool;
/**************************************/
uchar code tab[]={
"这是一个液晶测试"
"小江编写,仅供简"
"程序,由南华大学"
"当测试,谢谢支持"
};							
/***************************************
/
/延时函数delay()
/
****************************************/
void delay (uint us)      
{
     while(us--);
}
/**************************************
/
/delayms()延迟指定的ms数
/
**************************************/
void delayms (uint ms)
{
     uint i,j;
     for(i=0;i<ms;i++)
     for(j=0;j<15;j++)
     delay(1);
}
/***************************************
/
/nRF24LE1的I/O口初始化
/
***************************************/
void IOCNFG()
{
 P0DIR&=0XF0;    /*设置P0.0~P0.3为输出*/
}
/***************************************
/
/nRF24LE1工作时钟设置
/
***************************************/
void WorkClkSet()
{			  
 CLKCTRL = 0x28;			  	
 CLKLFCTRL = 0x01;
}	 
/**************************************
/
/ResetLcd()复位液晶显示
/
***************************************/
void ResetLcd(void)
{
   RESET=0;
   delayms(10);
   RESET=1;
}
/**************************************
/
/串行写一个字节
/
**************************************/
void  SendByte(uchar dat)   
 {   
  uchar i;   
     for(i=0;i<8;i++)   
     {   
       SCLK=0;   
       if(dat&0x80)
	   DIO=1;
	   else     
	   DIO=0;   
       SCLK=1;   
       dat=dat<<1;   
      }   
 } 
	
/**************************************
/
/通过串行方式往LCD里写数据或者指令
/
***************************************/
void WLcd( uchar Dat_Cmd,uchar dat)
{
    uchar tmp;     
	if(Cmd==Dat_Cmd)
	{
	tmp=0xf8;
	}
	else if(Dat==Dat_Cmd)
	{
	tmp=0xfa;
	}
	SendByte(tmp);
 	SendByte((dat&0xF0));
	SendByte((dat&0x0F));	  
}
/*****************************************
/
/LCD初始化函数
/
******************************************/
void init_lcd (void)
{	 delay(100);
     WLcd(Cmd,0x30); /*使用基本指令集*/      
     WLcd(Cmd,0x0c); /*开显示,关游标*/
	 WLcd(Cmd,0x01); /*清屏,地址指针指向00H*/
     WLcd(Cmd,0x02); 
	 WLcd(Cmd,0x80); /*光标的移动方向*/
     delay(100);
}
/******************************************
/
/显示汉字或字符
/
*******************************************/
void chn_disp (uchar code *chn)
{
     uchar i,j;
	 WLcd(Cmd,0x80);
     for (j=0;j<4;j++)
      {
       for (i=0;i<16;i++)
        {
	     WLcd(Dat,chn[j*16+i]);
        }	
	  }
}
/*****************************************
/
/清DDRAM
/
******************************************/
void clrram(void)
{
   WLcd(Cmd,0x30);  /*功能设定    */
   WLcd(Cmd,0x01);  /*清除显示指令*/
   delay(180);
}

/******************************************
/
/主函数部分
/
*******************************************/
void main ()
{
 //    Disableint;      /*中断关闭          */
//	 WorkClkSet();	  /*设置nRF24LE1的时钟*/
//	 IOCNFG();		  /*I/O口初始设置     */	  
     init_lcd();	  /*液晶初始化        */
//	 Enableint;		  /*使能中断          */
     {
      chn_disp(tab);
     // delayms(500);
     }	
	while (1);
	 
}

⌨️ 快捷键说明

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