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

📄 7920.c

📁 欢迎交流!我刚学习!还需要努力!谢谢!怎么学习!学习什么有前途呢?
💻 C
📖 第 1 页 / 共 2 页
字号:
 
#include "reg52.h"
#include "rtx51tny.h"

sbit rs=P2^2;
sbit rw=P2^1;
sbit e=P2^0;
sbit CS  =P2^7;							//CS为P2.6
sbit SK  =P2^6;							//SK为P2.5
sbit DI  =P2^5;							//DI为P2.4
sbit DO  =P2^4; 						//DO为P2.3
#define  High 1							//定义高电平
#define  Low 0							//定义高电平
#define  READ_D  0x0C					//读指令
#define  WRITE_D 0x0A					//写指令
#define  ERASE_D 0x0E					//擦除指令
#define  EN_D    0x09						//擦/写允许指令
#define  EN_RD   0x80
#define  LCDBUS P0
#define  uchar unsigned char
#define  uint  unsigned int
unsigned char code BMP[];
/***********uchar guo********************93C46驱动程序*********************************/
/*********************************延时函数*********************************/
void delay_L(uchar n)
{
  uchar i;
  for(i=0;i<n;i++);
}

/*********************************时钟函数*********************************/
void i_clock(void)
{
  SK=Low;
  delay_L(1);
  SK=High;
  delay_L(1);
}

/********************************输入函数**********************************/
//输入一个字节的数据到AT93C66中
void send(uchar i_data)
{
 uchar i;
 for(i=0;i<8;i++)
   {
     DI=(bit)(i_data&0x80);
     i_data<<=1;
     i_clock();
   }
}

/********************************接收函数**********************************/
//从AT93C66接收1个字节的数据
uchar receive(void)
{
 uchar i_data=0;
 uchar j;
 i_clock();
 for(j=0;j<8;j++)
   {
    i_data*=2;
    if(DO)i_data++;
    i_clock();
    delay_L(2);
   }
  return(i_data);
}
/**********************************读操作函数********************************/
//发送读指令和地址,从AT93C66指定的地址中读取数据
uchar read(uchar addr)
  {
    uchar data_r;
    CS=1;							//片选
    send(READ_D);					//送读指令
    send(addr);						//送地址
    data_r=receive();					//接收数据
    CS=0;
    return(data_r);
  }

/****************************擦写允许操作函数******************************/
void enable(void)
  {
    CS=1;
    send(EN_D);					//送使能指令
    send(EN_RD);
    CS=0;
  }

/*****************************擦除操作函数********************************/
//擦除AT93C66中指定地址的数据
void erase(uchar addr)
{
  DO=1;
CS=1;
send(ERASE_D);					//送擦除指令
send(addr);
CS=0;
delay_L(4);
CS=1;
while(!DO);						//等待擦除完毕
CS=0;
}
/*********************************写操作函数*********************************/
//将一个字节数据写入AT93C66指定的地址中
void wirite(uchar addr,uchar dat)
  {
    enable();						//擦写允许
    erase(addr);						//写数据前擦除同样地址的数据
    CS=1;
    send(WRITE_D);					//送写指令
    send(addr);         //地址
    send(dat);            //数据
	CS=0;
    delay_L(4);
    CS=1;
    delay_L(4);
    while(!DO)						//等待写完
   CS=0;
 }
bit wirite_d(uchar addr,uchar dat)
 {
  uchar d0,d1;
  wirite(addr,dat);
  wirite(addr+1,dat);
  d0 = read(addr);
  d1 =read(addr+1);
 if(d0!=d1)return (1);
 else return(0);
}


uchar read_d(uchar addr)
{
uchar d0,d1;
d0=read(addr);
d1=read(addr+1);
if(d0==d1)return (d0);
else return(100);
}













/****************************lcd程序*****************************************/
void delay(unsigned int t)
  { unsigned int i,j;
     for(i=0;i<t;i++)
     for(j=0;j<10;j++);
}
void SendCMD(uchar Cmd)
{
rs=0;
rw=0;
e=1;
LCDBUS=Cmd;
e=0;
delay(5);
}

void SendData(uchar Data)
{
rs=1;
rw=0;
e=1;
LCDBUS=Data;
e=0;
delay(5);
}

void lcdinit()
{
delay(2000);
SendCMD(0x30);
delay(10);
SendCMD(0x30);
delay(5);
SendCMD(0x0C);
delay(10);
SendCMD(0x01);
delay(500);
SendCMD(0x06);
delay(0);
}
void putstr(unsigned char code * s)	  //显示一字付串
{ 
while(*s>0)
{
SendData(*s);
s++;
delay(50);
}
}
void PutBMP(unsigned char code*puts)
{ unsigned int j=0;
  unsigned char x,y,i;
     for(i=0;i<9;i+=8)
	 for(y=0;y<32;y++)
for(x=0;x<8;x++)
{SendCMD(0x36);
 SendCMD(y+0x80);
 SendCMD(x+0x80+i);
 SendCMD(0x30);
 SendData(puts[j++]);
 SendData(puts[j++]);
}
} 
void point(uchar row)
{ 
switch(row)

{case 1:
 SendCMD(0x80);
  putstr(">>") ;
  SendCMD(0x90);
  putstr("  ") ;
  SendCMD(0x88);
  putstr("  ") ;
  SendCMD(0x98);
  putstr("  ") ;
  break;
case 2:
  SendCMD(0x80);
   putstr("  ") ;
  SendCMD(0x90);
  putstr(">>") ;
  SendCMD(0x88);
  putstr("  ") ;
  SendCMD(0x98);
  putstr("  ") ;
  break;
case 3:
  SendCMD(0x80);
   putstr("  ") ;
  SendCMD(0x90);
  putstr("  ") ;
  SendCMD(0x88);
  putstr(">>") ;
  SendCMD(0x98);
  putstr("  ") ;
  break;

case 4:
  SendCMD(0x80);
   putstr("  ") ;
  SendCMD(0x90);
  putstr("  ") ;
  SendCMD(0x88);
  putstr("  ") ;
  SendCMD(0x98);
  putstr(">>") ;
 break;
 default:
 break;
   }
}
void disp(uchar *ma, uchar * ma2, uchar * ma3 ,uchar * ma4)
{  
  SendCMD(0x01);
   SendCMD(0x81);
   delay(20);
  SendCMD(0x81);
   putstr(ma) ;
  SendCMD(0x91);
   putstr(ma2) ;
   SendCMD(0x89);
   putstr(ma3) ;
   SendCMD(0x99);
   putstr(ma4) ;
}


void Putcode(uchar *puts,uchar i,uchar addre )//放数组用的函数
{

  uchar j;
SendCMD(addre);
  delay(20);
  SendCMD(addre);
 for (j=0;j<i;j++)
	{SendData(puts[j]);		
	}

}

void  changeN4C(uchar n,uchar *buf)
{
switch(n){
 case 0: *buf='0'; break;
 case 1: *buf='1'; break;
 case 2: *buf='2'; break;
 case 3: *buf='3'; break;
 case 4: *buf='4'; break;
 case 5: *buf='5'; break;
 case 6: *buf='6'; break;
 case 7: *buf='7'; break;
 case 8: *buf='8'; break;
 case 9: *buf='9'; break;
}
}


/*************************************************************************
//显示菜单
************************************************************************/
 void disp_Mune_count(uchar guo,uchar qian,uchar wan)
{
 uchar bufguo[2]={'0','0'};
 uchar bufqian[2]={'0','0'};
 uchar bufwan[2]={'0','0'};

  if(guo<10)
        {  bufguo[0]='0';
 	       changeN4C(guo,&bufguo[1]);
          }
     else {
    changeN4C(guo/10,&bufguo[0]);	 
    changeN4C(guo%10,&bufguo[1]);
    }
   if(qian<10)
   { 
    bufqian[0]='0';
 	 changeN4C(qian,&bufqian[1]);
   }
  else {
   changeN4C(qian/10,&bufqian[0]);
   changeN4C(qian%10,&bufqian[1]);
  }
  if(wan<10)

⌨️ 快捷键说明

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