本文主要是介绍读字库写FM24C04,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
/*PCB机板增加读写24C64函数PAST 2017 12 26 08:10 CODE 7382*/
/*按11键进入手动选择,按12键进入参数设定界面
按1存1 2存2 3存3 15存0 16存1236 17读EEPROM显示正确
L1008 13775061792 ******/
#include <reg52.h>
#include <intrins.h>
#include <stdlib.h>
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
typedef unsigned char BYTE;
typedef unsigned int WORD;
sbit cd=P7^7; // PIN 56
sbit ce=P4^5; // PIN 57
sbit rst=P4^6; // PIN 58
sbit wr=P7^6; // PIN 55
sbit rd=P7^5; // PIN 54
sbit fs=P6^0; // PIN 5
sbit OUT1=P2^7; // PIN 52 按键总线例
sbit OUT2=P7^4; // PIN 53
sbit OUT3=P5^2; // PIN 64
sbit OUT4=P5^3; // PIN 1
sbit IN1=P2^4; // PIN49 按键总线横
sbit IN2=P2^5; // PIN50
sbit IN3=P2^6; // PIN51
sbit IN4=P6^1; // PIN6
sbit IN5=P6^2; // PIN7
sbit IN6=P6^3; // PIN8
sbit IN7=P5^5; // PIN20
sbit STOP=P3^3; // 停止
sbit INSERT=P3^2; // 插入
sbit CP1=P2^2; // PIN47
sbit DIR1=P2^3; // PIN48
sbit EN1=P7^2; // PIN39
sbit CP2=P2^1; // PIN46
sbit DIR2=P7^1; // PIN38
sbit EN2=P7^0; // PIN37
sbit CP3=P3^5; // PIN34
sbit DIR3=P5^1; // PIN33
sbit EN3=P4^0; // PIN22
sbit INTPUT0=P2^0; // PIN45
sbit INTPUT1=P4^4; // PIN44
sbit INTPUT2=P4^3; // PIN43
sbit INTPUT3=P4^2; // PIN42
sbit INTPUT4=P4^1; // PIN41
sbit INTPUT5=P7^3; // PIN40
sbit INTPUT6=P3^7; // PIN36
sbit INTPUT7=P3^6; // PIN35
sbit SCL=P1^7; // PIN17 外部EEPROM 24C64PIN6
sbit SDA=P5^4; // PIN18 外部EEPROM 24C64PIN5
#define dataport P0 //P0为数据口
uint counter,val,vals;
sbit Rom_CS=P1^4; /*1字库IC接口定义Rom_CS就是字库IC的CS#*/
sbit Rom_SCK=P1^6; /*2字库IC接口定义:Rom_SCK就是字库IC的SCK*/
sbit Rom_OUT=P1^3; /*字库IC接口定义:Rom_OUT就是字库IC的OUT*/
sbit Rom_IN=P1^5; /*字库IC接口定义:Rom_IN就是字库IC的IN*/
#define ulong unsigned long
uchar fontbuff[32]; //字库中读出的数据存放缓冲数组单元
uchar newbuff[32]; //将字库中读出的数据进行转换
bdata char com_data; /********/
sbit mos_bit=com_data^7; /****高位****/
sbit low_bit=com_data^0; /****低位****/
uchar code Testbuff[32]={
0X07,0X04,0X04,0X04,0X07,0X04,0X04,0X04,
0XF0,0X10,0X10,0X10,0XF0,0X10,0X10,0X10,
0X07,0X04,0X08,0X08,0X10,0X20,0X40,0X00,
0XF0,0X10,0X10,0X10,0X10,0X10,0X50,0X20
};
uint counter;
int code fontadd[32]={0,8,1,9,2,10,3,11, //竖置横排转横置横排点阵排列表
4,12,5,13,6,14,7,15,
16,24,17,25,18,26,19,27,
20,28,21,29,22,30,23,31};
int code xsadd[15]={0,16,32,48,64,80,96,112,128,144,160,176,192,208,224}; //0-9首地址 每字64字节
uchar code tab0[240]={
0X00,0X3C,0X42,0X42,0X42,0X42,0X42,0X42,
0X42,0X42,0X42,0X42,0X42,0X42,0X3C,0X00,//0
0X00,0X30,0X50,0X10,0X10,0X10,0X10,0X10,
0X10,0X10,0X10,0X10,0X10,0X10,0X38,0X00,//1
0X00,0X3C,0X42,0X02,0X02,0X02,0X04,0X08,
0X10,0X20,0X20,0X40,0X40,0X42,0X7E,0X00,//2
0X00,0X3C,0X42,0X02,0X02,0X02,0X02,0X3C,
0X02,0X02,0X02,0X02,0X02,0X42,0X3C,0X00,//3
0X00,0X0C,0X14,0X24,0X24,0X44,0X44,0X84,
0X84,0XFE,0X04,0X04,0X04,0X04,0X04,0X00,//4
0X00,0X7E,0X40,0X40,0X40,0X40,0X7C,0X02,
0X02,0X02,0X02,0X02,0X42,0X42,0X3C,0X00,//5
0X00,0X3C,0X42,0X40,0X40,0X40,0X7C,0X42,
0X42,0X42,0X42,0X42,0X42,0X42,0X3C,0X00,//6
0X00,0X3E,0X42,0X04,0X04,0X08,0X08,0X10,
0X10,0X10,0X10,0X10,0X10,0X10,0X10,0X00,//7
0X00,0X3C,0X42,0X42,0X42,0X42,0X42,0X3C,
0X42,0X42,0X42,0X42,0X42,0X42,0X3C,0X00,//8
0X00,0X3C,0X42,0X42,0X42,0X42,0X42,0X3C,
0X02,0X02,0X02,0X02,0X02,0X42,0X3C,0X00,//9
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,/*"清除",*/
0X00,0X00,0X42,0X42,0X24,0X24,0X18,0X18,
0X18,0X18,0X24,0X24,0X42,0X42,0X00,0X00,//X
0X00,0X00,0X41,0X41,0X22,0X14,0X08,0X08,
0X08,0X08,0X08,0X08,0X08,0X08,0X00,0X00,//Y
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X60,0X60,0X00,//.
0X00,0X3C,0X42,0X42,0X40,0X40,0X40,0X3C,
0X02,0X02,0X02,0X02,0X42,0X42,0X3C,0X00 //S 14
};
/*------------延时子程序---------------------*/
void delay(unsigned int t)
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<100;j++);
}
/**************************************/
void start()
{
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SDA=0;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
}
/***************************************/
void stop()
{
SDA=0;_nop_();_nop_();_nop_();_nop_();
SCL=1;_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();
}
/***************************************/
void ack()
{
SCL=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
}
/***************************************/
void shift8(char a)
{
data uchar i;
com_data=a;
for(i=0;i<8;i++)
{
SDA=mos_bit;
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
com_data=com_data*2;
}
}
/***************************************/
void delay_iic(int v)
{
int i,j;
for(i=1;i<v;i++)
{
for(j=0;j<50;j++)
{
_nop_();
}
}
}
/***************************************/
uchar rd_24C64(char a)
{
data uint i,command;
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
start();
command=160;
shift8(command); /*****写入160*****/
ack();
shift8(0X0F); /*****写高八位地址 高三位无效*****/
ack();
shift8(a); //
ack();
start();
command=161;
shift8(command); /*****写入161*****/
ack();
SDA=1;_nop_();_nop_();_nop_();_nop_();
for(i=0;i<8;i++)
{
com_data=com_data*2;
SCL=1;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
low_bit=SDA;
SCL=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
}
stop();
return(com_data);
}
/***************************************/
void wr_24C64(char a,char b) //a地址 b数据
{
data uint command;
_nop_();_nop_();_nop_();_nop_();_nop_();
SDA=1;_nop_();_nop_();_nop_();_nop_();
SCL=0;_nop_();_nop_();_nop_();_nop_();
start();
command=160;
shift8(command); /*****写入160*****/
ack();
shift8(0X0F); /*****写高八位地址 高三位无效*****/
ack();
shift8(a); /*****写入低八位地址 a *****/
ack();
shift8(b); /*****写入 b *****/
ack();
stop();
_nop_();_nop_();_nop_();_nop_();_nop_();
}
/************延时函数****************/
void delay_nms(unsigned int n)
{
unsigned int i,j;
for(i=n;i>0;i--)
{
for(j=2000;j>0;j--)
{
}
}
}
/***状态检查函数*指令,数据读写状态检查**/
void Lcd_Busy()
{
uchar dat;
do
{
dataport=0xff;
ce=0;
cd=1;
wr=1;
rd=0;
dat=dataport;
rd=1;
dat=0x03&dat;//STA0,STA1是否准备好
}
while(dat!=0x03);
}
/*******数据自动写状态检查*****************/
void autowcheck()
{
uchar dat;
do
{
dataport=0xff;
ce=0;
cd=1;
wr=1;
rd=0;
dat=dataport;
rd=1;
dat=0x08&dat;//STA3是否准备好
}
while(dat==0x00);
}
/*------输入/出函数,与T6963通讯------------------------------------------------*/
// 向数据口发Data
void wr_data(uchar dat)
{
ce=0;
cd=0;
dataport=dat;
wr=0;
wr=1;
}
/*****写有1个参数命令***********/
void wr_com1(uchar command)
{
Lcd_Busy();
cd=1;
ce=0;
rd=1;
dataport=command;
wr=0;
wr=1;
}
/******写有 3 个参数命令*******************/
void wr_com3(uchar data1, uchar data2, uchar command)
{
Lcd_Busy();
wr_data(data1);
Lcd_Busy();
wr_data(data2);
wr_com1(command);
}
/*--------------------------------*/
void lcd_address(uchar urow,uchar ucol) //urow 为1---30(240/8=30),,ucol为1---64
{
uint ipos;
uchar urow1;
uchar ucol1;
urow1=urow-1; // 1---30
ucol1=ucol-1; // 1---64
ipos=ucol1*30+urow1;
wr_com3(ipos&0xff,0x08+ipos/256,0x24);
}
/************清屏*******************/
void ClearScreen()
{
unsigned int i;
wr_com3(0x00,0x00,0x24); //设置指针地址0000H
wr_com1(0xb0); //设置自动写状态
for(i=0;i<9600;i++) //320X240/8=9600
{
autowcheck();
wr_data(0x00);
}
wr_com1(0xb2); // 自动写结束
}
/**********初始化LCD****************/
void InitLCD()
{
cd=1;
wr=1;
rd=1;
wr_com3(0x00,0x00,0x40); //设置文本显示区域首地址GraphAddr
wr_com3(0x1e,0x00,0x41); //设置文本显示区域宽度:1eH 1 1110 16+8+4+2=30
wr_com3(0x00,0x08,0x42); //设置图形显示区域首地址GraphAddr
wr_com3(0x1e,0x00,0x43); //设置图形显示区域宽度:1eH
wr_com1(0XA0); //设置显示方式: CGROM方式 文本\图形 "或"
wr_com1(0X80); //设置显示方式: CGROM方式 文本\图形 "或"
wr_com1(0X9C); //显示开关设置,开文本和图形显示*/
ClearScreen();
}
/*显示字库处理汉字字符表汉字点阵代码*/
void display_chines_16x16(uchar urow,uchar ucol,uchar *dp)
{
uchar i,j,K;
K=0;
for(j=0;j<16;j++)
{
lcd_address(urow,ucol+j);
wr_com1(0xb0); //设置自动写状态
for(i=0;i<2;i++)
{
autowcheck(); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/
wr_data(*(dp+fontadd[K]));
K++;
}
wr_com1(0xb2); // 自动写结束
}
}
/********************************/
void display_graphic_16x8(uchar urow,uchar ucol,int mm,uchar *dp)
{
uchar j;
for(j=0;j<16;j++)
{
lcd_address(urow,ucol+j);
wr_com1(0xb0); //设置自动写状态
autowcheck(); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/
wr_data(*(dp+mm));
dp++;
wr_com1(0xb2); // 自动写结束
}
}
/*反码显示字库处理汉字字符表汉字点阵代码*/
void display_negate_16x16(uchar urow,uchar ucol,uchar *dp)
{
uchar i,j,K;
K=0;
for(j=0;j<16;j++)
{
lcd_address(urow,ucol+j);
wr_com1(0xb0); //设置自动写状态
for(i=0;i<2;i++)
{
autowcheck(); /*写数据到LCD,每写完一个8位的数据后列地址自动加1*/
wr_data(~*(dp+fontadd[K]));
K++;
}
wr_com1(0xb2); // 自动写结束
}
}
/***********字库芯片程序*************************/
/***********送指令到字库IC***********************/
void send_command_to_ROM( uchar datu )
{
uchar i;
for(i=0;i<8;i++)
{
if(datu&0x80)
Rom_IN=1;
else
Rom_IN=0;
datu=datu<<1;
Rom_SCK=0;
Rom_SCK=1;
}
}
/*****(从字库IC中取汉字或字符数据(1个字节****/
static uchar ROMDATA( )
{
uchar i;
uchar ret_data=0;
Rom_SCK=1;
for(i=0;i<8;i++)
{
Rom_OUT=1;
delay(1);
Rom_SCK=0;
ret_data=ret_data<<1;
if( Rom_OUT )
ret_data=ret_data+1;
else
ret_data=ret_data+0;
Rom_SCK=1;
}
return(ret_data);
}
/*从相关地址High地址高字节Mid地址中字节Low地址低字节中连续读出DataLen个字节的数据到 pBuff的地址*/
void BytesDataFromROM(uchar ADHigh,ADMid, ADLow,DataLen,uchar *pBuff)
{
uchar i;
Rom_CS = 0;
Rom_SCK=0;
send_command_to_ROM(0x03);
send_command_to_ROM(ADHigh);
send_command_to_ROM(ADMid);
send_command_to_ROM(ADLow);
for(i=0;i<DataLen;i++ )
*(pBuff+i)=ROMDATA();
Rom_CS=1;
}
/******************************************************************/
ulong fontaddr=0;
void displayGB2312(uchar MSB,uchar LSB)
{
uchar i= 0;
uchar addrHigh,addrMid,addrLow ;
if(((MSB>=0xb0) &&(MSB<=0xf7))&&(LSB>=0xa1))
{
/*国标简体(GB2312)汉字在字库IC中的地址由以下公式来计算:*/
/*Address = ((MSB - 0xB0) * 94 + (LSB - 0xA1)+ 846)*32+ BaseAdd;BaseAdd=0*/
/*由于担心8位单片机有乘法溢出问题,所以分三部取地址*/
fontaddr = (MSB-0xb0)*94;
fontaddr += (LSB-0xa1)+846;
fontaddr = (ulong)(fontaddr*32);
addrHigh = (fontaddr&0xff0000)>>16; /*地址的高8位,共24位*/
addrMid = (fontaddr&0xff00)>>8; /*地址的中8位,共24位*/
addrLow = fontaddr&0xff; /*地址的低8位,共24位*/
BytesDataFromROM(addrHigh,addrMid,addrLow,32,fontbuff);/*取32个字节的数据,存到"fontbuf[32]"*/
i+=2;
}
else if(((MSB>=0xa1) &&(MSB<=0xa3))&&(LSB>=0xa1))
{
/*国标简体(GB2312)15x16点的字符在字库IC中的地址由以下公式来计算:*/
/*Address = ((MSB - 0xa1) * 94 + (LSB - 0xA1))*32+ BaseAdd;BaseAdd=0*/
/*由于担心8位单片机有乘法溢出问题,所以分三部取地址*/
fontaddr = (MSB- 0xa1)*94;
fontaddr += (LSB-0xa1);
fontaddr = (ulong)(fontaddr*32);
addrHigh = (fontaddr&0xff0000)>>16; /*地址的高8位,共24位*/
addrMid = (fontaddr&0xff00)>>8; /*地址的中8位,共24位*/
addrLow = fontaddr&0xff; /*地址的低8位,共24位*/
BytesDataFromROM(addrHigh,addrMid,addrLow,32,fontbuff);/*取32个字节的数据,存到"fontbuf[32]"*/
i+=2;
}
else if((MSB>=0x20) &&(MSB<=0x7e))
{
unsigned char fontbuff[16];
fontaddr = (MSB- 0x20);
fontaddr = (unsigned long)(fontaddr*16);
fontaddr = (unsigned long)(fontaddr+0x3cf80);
addrHigh = (fontaddr&0xff0000)>>16;
addrMid = (fontaddr&0xff00)>>8;
addrLow = fontaddr&0xff;
BytesDataFromROM(addrHigh,addrMid,addrLow,16,fontbuff);/*取16个字节的数据,存到"fontbuf[32]"*/
i+=1;
}
else
i++;
}
/*汉字旋转子程序 将字库读出竖置横排结构的32字节数据
旋转90度成横置横排结构,转换后点阵结构为
左上部 右上部
左下部 右下部
显示时先取左上部最顶端数据,再取右上部顶端数据,
再取左上部第二行数据,右上部第二行数据 ......*****/
void fontchange(void)
{
uchar fontbuf;
uint buff,i,step;
for(step=0;step<8;step++) //16X16 左上角部分 总循环8步
{
fontbuf=0; //初始化 字节运算缓存器等于0
buff=0; //字节缓冲器初始化.
for(i=0;i<8;i++) //第一层循环,取竖置横排8字节第1个点。
{
fontbuf<<=1; //数据自右向左移动,共移动7位,合并一字节
buff=fontbuff[i]>>step; //将当前转换的列地址fontbuff[i]右移step步.
buff&=0X01; //保留最低位置,
fontbuf|=buff; //字节缓存器等于新的运算字节和最低位相与
}
newbuff[step]=fontbuf; //将当前运算的一字节新数据存当前运算地址.
}
for(step=0;step<8;step++) //16X16 右上角部分总循环8步
{
fontbuf=0; //初始化 字节运算缓存器等于0
buff=0; //字节缓冲器初始化.
for(i=0;i<8;i++) //第一层循环,取竖置横排8字节第1个点。
{
fontbuf<<=1; //数据自右向左移动,共移动7位,合并一字节
buff=fontbuff[i+8]>>step; //将当前转换的列地址fontbuff[i]右移step步.
buff&=0X01; //保留最低位置,
fontbuf|=buff; //字节缓存器等于新的运算字节和最低位相与
}
newbuff[step+8]=fontbuf; //将当前运算的一字节新数据存当前运算地址.
}
for(step=0;step<8;step++) //16X16 左下角部分总循环8步
{
fontbuf=0; //初始化 字节运算缓存器等于0
buff=0; //字节缓冲器初始化.
for(i=0;i<8;i++) //第一层循环,取竖置横排8字节第1个点。
{
fontbuf<<=1; //数据自右向左移动,共移动7位,合并一字节
buff=fontbuff[i+16]>>step; //将当前转换的列地址fontbuff[i]右移step步.
buff&=0X01; //保留最低位置,
fontbuf|=buff; //字节缓存器等于新的运算字节和最低位相与
}
newbuff[step+16]=fontbuf; //将当前运算的一字节新数据存当前运算地址.
}
for(step=0;step<8;step++) //16X16 右下角部分总循环8步
{
fontbuf=0; //初始化 字节运算缓存器等于0
buff=0; //字节缓冲器初始化.
for(i=0;i<8;i++) //第一层循环,取竖置横排8字节第1个点。
{
fontbuf<<=1; //数据自右向左移动,共移动7位,合并一字节
buff=fontbuff[i+24]>>step; //将当前转换的列地址fontbuff[i]右移step步.
buff&=0X01; //保留最低位置,
fontbuf|=buff; //字节缓存器等于新的运算字节和最低位相与
}
newbuff[step+24]=fontbuf; //将当前运算的一字节新数据存当前运算地址.
}
}
/************************************/
void counteradd()
{
uchar h1,l1,m1,n1; /****个十百千代码缓冲**/
h1=counter/1000;
l1=(counter-h1*1000)/100;
m1=(counter-h1*1000-l1*100)/10;
n1=counter-h1*1000-l1*100-m1*10;
display_graphic_16x8(11,49,xsadd[h1],tab0);//
display_graphic_16x8(12,49,xsadd[l1],tab0);//
display_graphic_16x8(13,49,xsadd[m1],tab0);//
display_graphic_16x8(14,49,xsadd[n1],tab0);//
}
/************************************/
void dis_val()
{
uchar h,l,m,n; /****个十百千代码缓冲**/
//vals=1225;
h=vals/1000;
l=(vals-h*1000)/100;
m=(vals-h*1000-l*100)/10;
n=vals-h*1000-l*100-m*10;
display_graphic_16x8(11,33,xsadd[h],tab0);//
display_graphic_16x8(12,33,xsadd[l],tab0);//
display_graphic_16x8(13,33,xsadd[m],tab0);//
display_graphic_16x8(14,33,xsadd[n],tab0);//
}
/************************************/
void write_val()
{
uchar h,l,m,n; /****个十百千代码缓冲**/
h=val/1000; //千位
l=(val-h*1000)/100; //百位
m=(val-h*1000-l*100)/10; //十位
n=val-h*1000-l*100-m*10; //个位
wr_24C64(1,n); /*写入个位*/
wr_24C64(2,m); /*写入十位*/
wr_24C64(3,l); /*写入百位*/
wr_24C64(4,h); /*写入千位*/
}
/************************************/
void read_val()
{
uchar k_data,h_data,t_data,b_data; //
b_data=rd_24C64(1);delay_iic(200); // 个位
t_data=rd_24C64(2);delay_iic(200); // 十位
h_data=rd_24C64(3);delay_iic(200); // 百位
k_data=rd_24C64(4);delay_iic(200); // 千位
vals=k_data*1000+h_data*100+t_data*10+b_data;
//vals=2206;
}
/************************************/
void main(void)
{
P0M0=0;
P0M1=0;
P1M0=0X80; //1000 0000 P1.7开漏
P1M1=0X80; //1000 0000
P2M0=0;
P2M1=0;
P3M0=0;
P3M1=0;
P4M0=0;
P4M1=0;
P5M0=0X10; //0001 0000 P5.4开漏
P5M1=0X10; //0001 0000
P6M0=0;
P6M1=0;
P7M0=0;
P7M1=0;
OUT1=1;
OUT2=1;
OUT3=1;
OUT4=1;
IN1=1;
IN2=1;
IN3=1;
IN4=1;
IN5=1;
IN6=1;
IN7=1;
counter=0;
rst=0;
delay_nms(100);
rst=1;
delay_nms(100);
fs=0;
InitLCD();
ClearScreen();
wr_24C64(10,2); /*写入个位*/
wr_24C64(11,2); /*写入个位*/
wr_24C64(12,6); /*写入十位*/
wr_24C64(13,9); /*写入百位*/
displayGB2312(0XD7,0XD4);
fontchange();
display_chines_16x16(1,1,newbuff);
displayGB2312(0XB6,0XAF);
fontchange();
display_chines_16x16(3,1,newbuff);
displayGB2312(0XD6,0XB4);
fontchange();
display_chines_16x16(5,1,newbuff);
displayGB2312(0XD0,0XD0);
fontchange();
display_chines_16x16(7,1,newbuff); //自动执行
displayGB2312(0XCA,0XD6);
fontchange();
display_chines_16x16(1,17,newbuff);
displayGB2312(0XB6,0XAF);
fontchange();
display_chines_16x16(3,17,newbuff);
displayGB2312(0XB2,0XD9);
fontchange();
display_chines_16x16(5,17,newbuff);
displayGB2312(0XD7,0XF7);
fontchange();
display_chines_16x16(7,17,newbuff); //手动操作
displayGB2312(0XB3,0XCC);
fontchange();
display_chines_16x16(1,33,newbuff);
displayGB2312(0XD0,0XF2);
fontchange();
display_chines_16x16(3,33,newbuff);
displayGB2312(0XB9,0XDC);
fontchange();
display_chines_16x16(5,33,newbuff);
displayGB2312(0XC0,0XED);
fontchange();
display_chines_16x16(7,33,newbuff); //程序管理
displayGB2312(0XB2,0XCE);
fontchange();
display_chines_16x16(1,49,newbuff);
displayGB2312(0XCA,0XFD);
fontchange();
display_chines_16x16(3,49,newbuff);
displayGB2312(0XC9,0XE8);
fontchange();
display_chines_16x16(5,49,newbuff);
displayGB2312(0XD6,0XC3);
fontchange();
display_chines_16x16(7,49,newbuff); //参数设置
delay_nms(2000);
displayGB2312(0XD7,0XD4);
fontchange();
display_negate_16x16(1,1,newbuff);
displayGB2312(0XB6,0XAF);
fontchange();
display_negate_16x16(3,1,newbuff);
displayGB2312(0XD6,0XB4);
fontchange();
display_negate_16x16(5,1,newbuff); //反显自动执行
displayGB2312(0XD0,0XD0);
fontchange();
display_negate_16x16(7,1,newbuff);
display_graphic_16x8(9,1,xsadd[11],tab0);// X
display_graphic_16x8(11,1,xsadd[0],tab0);// 0
display_graphic_16x8(12,1,xsadd[0],tab0);// 0
display_graphic_16x8(13,1,xsadd[0],tab0);// 0
display_graphic_16x8(14,1,xsadd[0],tab0);// 0
display_graphic_16x8(15,1,xsadd[13],tab0);//.
display_graphic_16x8(16,1,xsadd[0],tab0);// 0
display_graphic_16x8(17,1,xsadd[0],tab0);// 0
display_graphic_16x8(19,1,xsadd[12],tab0);// Y
display_graphic_16x8(21,1,xsadd[0],tab0);// 0
display_graphic_16x8(22,1,xsadd[0],tab0);// 0
display_graphic_16x8(23,1,xsadd[0],tab0);// 0
display_graphic_16x8(24,1,xsadd[0],tab0);// 0
display_graphic_16x8(25,1,xsadd[13],tab0);//.
display_graphic_16x8(26,1,xsadd[0],tab0);// 0
display_graphic_16x8(27,1,xsadd[0],tab0);// 0
while(1)
{
counteradd();
delay_nms(50);
counter++;
if(!STOP)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示27
display_graphic_16x8(29,1,xsadd[7],tab0);//
CP1=1;
DIR1=1;
EN1=1;
CP2=1;
DIR2=1;
EN2=1;
CP3=1;
DIR3=1;
EN3=1;
}
if(!INSERT)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示25
display_graphic_16x8(29,1,xsadd[5],tab0);//
CP1=0;
DIR1=0;
EN1=0;
CP2=0;
DIR2=0;
EN2=0;
CP3=0;
DIR3=0;
EN3=0;
}
OUT1=0;
if(!IN1)
{
val=0003; /
write_val();
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示3
display_graphic_16x8(29,1,xsadd[3],tab0);//
EN1=0;
}
if(!IN2)
{
val=0002; /
write_val();
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示2
display_graphic_16x8(29,1,xsadd[2],tab0);//
DIR1=0;
}
if(!IN3)
{
val=0001; /
write_val();
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示1
display_graphic_16x8(29,1,xsadd[1],tab0);//
CP1=0;
}
if(!IN4)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示26
display_graphic_16x8(29,1,xsadd[6],tab0);//
}
if(!IN5)
{
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示19
display_graphic_16x8(29,1,xsadd[9],tab0);//
}
if(!IN6)
{
val=0000; /
write_val();
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示15
display_graphic_16x8(29,1,xsadd[5],tab0);//
}
if(!IN7)
{ //显示11
displayGB2312(0XCA,0XD6);
fontchange();
display_chines_16x16(1,1,newbuff); //手动 高速
displayGB2312(0XB6,0XAF);
fontchange();
display_chines_16x16(3,1,newbuff);
displayGB2312(0XB8,0XDF);
fontchange();
display_chines_16x16(5,1,newbuff);
displayGB2312(0XCB,0XD9);
fontchange();
display_chines_16x16(7,1,newbuff);
displayGB2312(0XB5,0XE3); //点动操作
fontchange();
display_chines_16x16(1,17,newbuff);
displayGB2312(0XB6,0XAF);
fontchange();
display_chines_16x16(3,17,newbuff);
displayGB2312(0XB2,0XD9);
fontchange();
display_chines_16x16(5,17,newbuff);
displayGB2312(0XD7,0XF7);
fontchange();
display_chines_16x16(7,17,newbuff);
displayGB2312(0XBB,0XD8); //回程序零
fontchange();
display_chines_16x16(1,33,newbuff);
displayGB2312(0XB3,0XCC);
fontchange();
display_chines_16x16(3,33,newbuff);
displayGB2312(0XD0,0XF2);
fontchange();
display_chines_16x16(5,33,newbuff);
displayGB2312(0XC1,0XE3);
fontchange();
display_chines_16x16(7,33,newbuff);
displayGB2312(0XBB,0XD8); //回机械零
fontchange();
display_chines_16x16(1,49,newbuff);
displayGB2312(0XBB,0XFA);
fontchange();
display_chines_16x16(3,49,newbuff);
displayGB2312(0XD0,0XB5);
fontchange();
display_chines_16x16(5,49,newbuff);
displayGB2312(0XC1,0XE3);
fontchange();
display_chines_16x16(7,49,newbuff);
}
OUT1=1;
delay_nms(50);
OUT2=0;
if(!IN1)
{
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示6
display_graphic_16x8(29,1,xsadd[6],tab0);//
EN2=0;
}
if(!IN2)
{
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示5
display_graphic_16x8(29,1,xsadd[5],tab0);//
DIR2=0;
}
if(!IN3)
{
uchar k_data,h_data,t_data,b_data; //
b_data=rd_24C64(10);delay_iic(200); // 个位
t_data=rd_24C64(11);delay_iic(200); // 十位
h_data=rd_24C64(12);delay_iic(200); // 百位
k_data=rd_24C64(13);delay_iic(200); // 千位
vals=k_data*1000+h_data*100+t_data*10+b_data;
dis_val();
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示4
display_graphic_16x8(29,1,xsadd[4],tab0);//
CP2=0;
}
if(!IN4)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示22
display_graphic_16x8(29,1,xsadd[2],tab0);//
}
if(!IN5)
{
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示18
display_graphic_16x8(29,1,xsadd[8],tab0);//
}
if(!IN6)
{
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示14
display_graphic_16x8(29,1,xsadd[4],tab0);//
}
if(!IN7)
{
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示10
display_graphic_16x8(29,1,xsadd[0],tab0);//
}
OUT2=1;
delay_nms(50);
OUT3=0;
if(!IN1)
{
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示9
display_graphic_16x8(29,1,xsadd[9],tab0);//
EN3=0;
}
if(!IN2)
{
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示8
display_graphic_16x8(29,1,xsadd[8],tab0);//
DIR3=0;
}
if(!IN3)
{
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示7
display_graphic_16x8(29,1,xsadd[7],tab0);//
CP3=0;
}
if(!IN4)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示21
display_graphic_16x8(29,1,xsadd[1],tab0);//
}
if(!IN5)
{
read_val();
dis_val();
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示17
display_graphic_16x8(29,1,xsadd[7],tab0);//
}
if(!IN6)
{
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示13
display_graphic_16x8(29,1,xsadd[3],tab0);//
}
OUT3=1;
delay_nms(50);
OUT4=0;
if(!IN1)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示24
display_graphic_16x8(29,1,xsadd[4],tab0);//
}
if(!IN2)
{
display_graphic_16x8(28,1,xsadd[10],tab0);// 显示0
display_graphic_16x8(29,1,xsadd[0],tab0);//
}
if(!IN3)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示23
display_graphic_16x8(29,1,xsadd[3],tab0);//
}
if(!IN4)
{
display_graphic_16x8(28,1,xsadd[2],tab0);// 显示20
display_graphic_16x8(29,1,xsadd[0],tab0);//
}
if(!IN5)
{
val=1236;
write_val();
display_graphic_16x8(28,1,xsadd[1],tab0);// 显示16
display_graphic_16x8(29,1,xsadd[6],tab0);//
}
if(!IN6)
{
InitLCD();
ClearScreen();
displayGB2312(0XB2,0XCE); /*---参---*/
fontchange();
display_chines_16x16(1,1,newbuff);
displayGB2312(0XCA,0XFD); /*---数---*/
fontchange();
display_chines_16x16(3,1,newbuff);
displayGB2312(0XC9,0XE8); /*---设---*/
fontchange();
display_chines_16x16(5,1,newbuff);
displayGB2312(0XB6,0XA8); /*---定---*/
fontchange();
display_chines_16x16(7,1,newbuff);
dis_val();
}
OUT4=1;
delay_nms(50); //INTPUT0
if(!INTPUT0)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[0],tab0);// 显示S0
}
if(!INTPUT1)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[1],tab0);// 显示S1
}
if(!INTPUT2)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[2],tab0);// 显示S2
}
if(!INTPUT3)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[3],tab0);// 显示S3
}
if(!INTPUT4)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[4],tab0);// 显示S4
}
if(!INTPUT5)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[5],tab0);// 显示S5
}
if(!INTPUT6)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[6],tab0);// 显示S6
}
if(!INTPUT7)
{
display_graphic_16x8(11,33,xsadd[14],tab0);//.
display_graphic_16x8(12,33,xsadd[7],tab0);// 显示S7
}
}
}
这篇关于读字库写FM24C04的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!