📄 7920.c
字号:
#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 + -