读字库写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
/*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>…...
boost::asio::ip::tcp::socket set_option
Boost asio 官方教程简介_asio::write-CSDN博客 boost::asio::ip::tcp::socket 是一个用于异步I/O操作的类,它是Boost.Asio库的一部分,专门用于处理TCP套接字。 以下是一个简单的使用 boost::asio::ip::tcp::socket 的例子,这个例子展示了如…...
华为鸿蒙HarmonyOS应用开发者高级认证答案
判断 1只要使用端云一体化的云端资源就需要支付费用(错) 2所有使用Component修饰的自定义组件都支持onPageShow,onBackPress和onPageHide生命周期函数。(错) 3 HarmonyOS应用可以兼容OpenHarmony生态(对…...

ElasticSearch 与 OpenSearch:拉开性能差距
Elasticsearch 与 OpenSearch:扩大性能差距 对于任何依赖快速、准确搜索数据的组织来说,强大、快速且高效的搜索引擎是至关重要的元素。对于开发人员和架构师来说,选择正确的搜索平台可以极大地影响您的组织提供快速且相关结果的能力。在我们…...
Java构造器
构造器 无参构造器有参构造器构造方法VS成员方法总结 概念:也称构造方法、构造函数。作用是构造出来一个类的实例,确保对象得到初始化。 格式: 权限修饰符 类名(无参/有参){ }。 分类: 带参数:有参构造器不带参数&am…...
TiDB系列之:使用TiUP部署TiDB集群最新版本,同时部署TiCDC的详细步骤
TiDB系列之:使用TiUP部署TiDB集群最新版本,同时部署TiCDC的详细步骤 一、部署TiDB集群二、准备环境三、安装 TiUP四、安装TiUP cluster组件五、初始化包含TiCDC的TiDB集群拓扑文件六、检查和修复集群存在的潜在风险七、查看可以安装的tidb版本八、部署 TiDB 集群:九、查看集…...
【经典算法】LeetCode 72. 编辑距离(Java/C/Python3/Go实现含注释说明,中等)
题目描述 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数。 你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 原题:LeetCode 72 思路及实现 方式一:动态规划 思路…...

webstorm 常用插件
安装插件步骤: 打开软件,文件 -- 设置-- 插件 -- 输入插件名称 -- 安装 代码截图: code screenShots 先选中代码,按 ctrl shift alt a,就可截取选中的代码颜色注释: comments highlighter 对注释的文字改变颜色高亮成对符号: h…...

clang:在 Win10 上编译 MIDI 音乐程序(二)
先从 Microsoft C Build Tools - Visual Studio 下载 1.73GB 安装 "Microsoft C Build Tools“ 访问 Swift.org - Download Swift 找到 Windows 10:x86_64 下载 swift-5.10-RELEASE-windows10.exe 大约490MB 建议安装在 D:\Swift\ ,安装后大约占…...

【redis】Redis数据类型(三)List类型
目录 List类型介绍特点 List数据结构附:3.2以前的版本(介绍一下压缩列表和双向链表)压缩列表ZipList双向链表LinkedList 常用命令lpush示例 lpushx示例 rpush示例 rpushx示例 LPOP示例 RPOP示例 BLPOP非阻塞行为阻塞行为相同的 key 被多个客户端同时阻塞在 MULTI/EX…...

Java面试题:多线程2
如何停止正在运行的线程 1,使用退出标志,使线程正常退出(run方法中循环对退出标志进行判断) 2,使用stop()方法强行终止(不推荐) 3,调用interrupt()方法中断线程 打断阻塞线程(sleep,wait,join),线程会抛出InterruptedException异常 打断正常的线程,可以根据打断状态来标记…...

T型槽地轨承载力是如何连接整个制造过程的强力桥梁(北重公司设计)
T型槽地轨承载力的定义和计算 T型槽地轨是一种用于工业设备运输和装配的关键组件。它由世界上各行各业的生产商广泛采用,其有效的承载力使其成为连接整个制造过程的强力桥梁。本文将介绍T型槽地轨的承载力以及相关的设计要点和应用。 承载力的定义和计算 承载力是…...
【Numpy】一文向您详细介绍 np.linspace()
【Numpy】一文向您详细介绍 np.linspace() 🌈 欢迎莅临我的个人主页👈 这里是我静心耕耘深度学习领域、真诚分享知识与智慧的小天地!🎇 🎓 博主简介:985高校的计算机专业人士,热衷于分享技术见…...

VMware虚拟网卡网络适配器出现黄色感叹号
问题发生:VMware在使用Ubuntu的过程中突然卡死,强制关闭开启后就发生了网络无法连接 找到电脑的设备管理发现VMware的适配器出现黄色感叹号 解决方法: 下载软件ccleaner 扫描问题,懒得去找就修复了所有的问题 最后发现适配器…...
论生命价值
我们该如何定义一个人的生命价值,这是一个十分值得我们深思的问题,而谈论到生命的价值,我们先从非人的东西去谈论它的价值,从我们作为人的角度去思考价值,一个东西对我们有用,这个东西能够让我们的主观上的…...

基于Springboot的民航网上订票系统(有报告)。Javaee项目,springboot项目。
演示视频: 基于Springboot的民航网上订票系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构…...

ubuntu开启message文件
环境:ubuntu 20.04 1、首先需要修改 /etc/rsyslog.d/50-default.conf 文件;源文件中message被注释,如下图: 2、打开注释: 3、重启服务 systemctl restart rsyslog.service 如此即可!...

ISIS的基本概念
1.ISIS概述 IS-IS是一种链路状态路由协议,IS-IS与OSPF在许多方面非常相似, 例如运行IS-IS协议的直连设备之间通过发送Hello报文发现彼此,然后建立邻接关系,并交互链路状态信息。 CLNS由以下三个部分组成: CLNP…...

Vue 工程化开发入门
Vue开发的两种方式: 核心包传统开发模式:基于html/css/js文件,直接引入核心包,开发Vue工程化开发模式:基于构建工具的环境中开发Vue 这里选择Vue cli脚手架 进行开发,搜索教程自行下载。 组件化开发 一个页…...

车牌号识别系统:PyQT5+QT Designe+crnn/PaddleOCR+YOLO+OpenCV矫正算法。
PyQT5&QT Designecrnn/PaddleOCRYOLO传统OpenCV矫正算法。可视化的车牌识别系统项目。 车牌号识别系统 项目绪论1.项目展示2.视频展示3.整体思路 一、PyQT5 和 QT Designer1.简介2.安装3.使用 二、YOLO检测算法三、OpenCV矫正算法四、crnn/PaddleOCR字符识别算法五、QT界面…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...

手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
进程地址空间(比特课总结)
一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...