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

📄 st7920.txt

📁 7920驱动程序
💻 TXT
字号:
本驱动程序采用51 模拟时序方式,晶振22.1184M,包含连种驱动方式,8 位并
行方式和串行方式。
图片取模方式:横向取模
/******************************************************************/
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
/******************************************************************/
sbit E_CLK =P1^4;//S MODE : clock input P MODE : E
sbit RW_SID=P1^5;//S MODE: data input/output P MODE : R/W
sbit RS_CS =P1^3;// DATA OR COMMAND
sbit RST =P1^6;
/***************************************************************************/
基本驱动程序
/***************************************************************************/
void wcomp(unsigned char com)//并口写命令
{ busy_check();//忙检测
RS_CS=0; //命令
RW_SID=0;//写
E_CLK=1;//ENABLE
DOC.NO:SG16032-02A REV: 1.0 - 29 -
nop();
P2=com;//送出数据
nop();
E_CLK=0;
}
void wdatap(unsigned char dat)//并口写数据
{ busy_check();
RS_CS=1;//数据
RW_SID=0;//写
E_CLK=1;
nop();
P2=dat;
nop();
E_CLK=0;
}
void busy_check(void)
{ unsigned char key;
P2=0XFF;
while(1)
{
RS_CS=0;//命令
RW_SID=1;//读
E_CLK=1;
key=P2;
E_CLK=0;
if((key&0X80)==0X00)
break;
}
}
unsigned char ReceieveByte(void)//串行方式接收数据
{
unsigned char i,d1,d2;
d1=0;d2=0;
for(i=0;i<8;i++)
{ E_CLK=0;
if(RW_SID)
d1++;
d1=d1<<1;
E_CLK=1;
}
for(i=0;i<8;i++)
{
E_CLK=0;
if(RW_SID)d2++;
d2=d2<<1;
E_CLK=1;
}
return ((d1&0xF0)+(d2&0x0F));
}
void SendByte(unsigned char dat)//串行发送数据
{
unsigned char i;
for(i=0;i<8;i++)
{
E_CLK=0;
if(dat&0x80)RW_SID=1;else RW_SID=0;
E_CLK=1;
dat=dat<<1;
}
}
unsigned char ReadBF()//串行方式读取忙状态
{ unsigned char temp;
unsigned char dat;
SendByte(0xFC);//11111,10,0 RW=1,RS=0
dat=ReceieveByte();
if(dat>0x7F)temp=1;else temp=0;
return temp;
}
//串行方式写命令
void wcoms(unsigned char dat)
{
while(ReadBF());
SendByte(0xF8);//11111,00,0 RW=0,RS=0 í?2?±ê??
SendByte(dat&0xF0);//??????
SendByte((dat&0x0F)<<4);//μí????
}
//串行方式写数据
void wdatas(unsigned char dat)
{
while(ReadBF());
SendByte(0xFA);//11111,01,0 RW=0,RS=1
SendByte(dat&0xF0);//??????
SendByte((dat&0x0F)<<4);//μí????
}
void wcom(unsigned char com)
{
unsigned char temp;
temp=P3&0X01;//通过P3.1 决定使用何种驱动方式
switch(temp)
{
case 0:
wcoms(com);
break;
case 1:
wcomp(com);
break;
}
}
void wdata(unsigned char dat)
{
unsigned char temp;
temp=P3&0X01;
switch(temp)
{
case 0:
wdatas(dat);
break;
case 1:
wdatap(dat);
break;
}
}
/********************************************************************************/
系统初始化
/*********************************************************************************/
void initlcd_char(void)
{
wcom(0x30);//基本指令
wcom(0x0C);//0000,1100 游标显示关
// wcom(0x01);//0000,0001 清除显示RAM
wcom(0x02);//0000,0010 显示RAM 地址归位
wcom(0x80);//1000,0000 设定显示RAM 地址到地址计数器
wcom(0x06);//右移位
wcom(0x0c);//开显示
}
void initlcd_pic(void)
{
wcom(0x34);
wcom(0x36);
wcom(0x0c);
wcom(0x06);
wcom(0x03);
wcom(0x40);
wcom(0x02);
}
void clear(void)
{
wcom(0x30);
wcom(0x01);//clear
}
/*************************************************************************/
调用字库显示汉字
/*************************************************************************/
//printf 函数用到的函数。要在STDIO.H 中将原有的PUTCHAR 函数屏蔽。
//写汉字要在基本指令集下进行。
void putchar(unsigned char cc)
{
switch(cc)
{
case '\c' : //clear
wcom(0x01);
break ;
case '\f' : //first line
wcom(0x80);
break ;
case '\s' : //second line
wcom(0x90);
break ;
case '\t' : //third line
wcom(0x88);
break ;
case '\d' : //fourth line
wcom(0x98);
break ;
default :
wdata(cc); //data
break;
}
}
应用:
initlcd_char();
clear();
printf("\f 集粹科技!");
printf("\s 信号测试!");
/****************************************************************************/
显示图片
/****************************************************************************/
void display_map(unsigned char *p)//P 是图片数据首地址
{unsigned char row;
unsigned int counta,countb;
s=p;
row=0x80;//行地址
for(counta=32;counta>0;counta--)
{wcom(row++);
wcom(0x80);//列地址,范围0-7,写完16 位数据后自动加1。
for(countb=16;countb>0;countb--)
{wdata(*s++);
}
}
}

⌨️ 快捷键说明

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