📄 x1228.c
字号:
/***********************************************************/
/* VFD12864D.C程序 汉字、西文(数字)分别调用不同的函数 */
/* 未将汉字拆成2个8×16的字体 */
/* 程序rec_ack()中将if(SDA==1)改为while(SDA==1) */
/***********************************************************/
#include <reg52.h>
#include <absacc.h>
#include <math.h>
//#include <string.h>
#define VFDWRITE 0x8000/*VFD写入口地址*/
#define VFDCONTROL 0x8800/*VFD状态选择控制地址*/
sbit SCL=P1^6;
sbit SDA=P1^7;
sbit AD_SCLK=P1^2;
sbit AD_DOUT=P1^0;
sbit AD_DIN=P1^1;
sbit AD_CS=P1^3;
unsigned char idata year,month,week,day,hour,minute,second;/*时间寄存器*/
unsigned int idata seri_num=1234,age=28,area=225;/*序号,龄期,截面积*/
unsigned int idata adbuffer,advalue;/*AD采样寄存器*/
unsigned int idata pressure,max_press,accl;/*即时压力,破型力值,加载速度*/
unsigned char idata codes=1234;/*原始设定密码*/
//unsigned char passwords[4];/*用户输入四位密码*/
unsigned char picture;/*选择画面标志*/
//unsigned char idata engbuf[64];/*将屏幕分成64个单元(8×16点阵)*/
unsigned char idata chnbuf[32];/*将屏幕分成32个单元(16×16点阵),汉字缓冲区*/
unsigned char idata numbuf[21];/*显示画面2中,将屏幕上最上一行分成 21个(6×8)单元*/
unsigned char code_1;/*指向数组的第几行*/
unsigned char xxx;/*同一编号的试样一般测试三块 xxx表示第几块 */
unsigned char keyval;/*键值*/
unsigned char count;/*标定点计数*/
unsigned long caiyang=16777215;
unsigned char yyy;
unsigned long zzz;
/**************************************/
/* 延时函数 */
/**************************************/
delay(int num)
{
int i;
for(i=0;i<num;i++)
{;}
}
/***********************************************************/
/* X1228芯片读写子程序 */
/***********************************************************/
void start()
{
SDA=1;
SCL=1;
SDA=0;
SCL=0;
}
void stop()
{
SDA=0;
SCL=1;
SDA=1;
SCL=0;
}
void write_byte(unsigned char byte)/*写一个字节*/
{
char count;
for(count=0;count<=7;count++)
{
SCL=0;
if((byte & 0x80)==0)
SDA=0;
else
SDA=1;
byte=byte<<1;
SCL=1;
}
SCL=0;
}
void rec_ack()/*接收确认信号*/
{
SDA=1;
for(;;)
{
SCL=1;
// while(SDA==1){delay(10);}
delay(50);
break;
}
SCL=0;
}
void write(char slave,char high,char low,char dat)/*CCR或ARRAY,地址高位,地址低位,数据*/
{
write_byte(slave);
rec_ack();
write_byte(high);
rec_ack();
write_byte(low);
rec_ack();
write_byte(dat);
rec_ack();
}
char rec_dat()/*接收X1228一个字节的数据*/
{
unsigned char number=0x00;
unsigned char count;
write_byte(0xdf);/*读数据*/
rec_ack();/*接收应答信号*/
SCL=0;
for(count=0;count<=7;count++)
{
number=number<<1;
SCL=1;
SDA=1;/*P1.4口置位*/
if(SDA==1)
{
number=number+1;
}
SCL=0;
}
return(number);
}
void read(char slave,char high,char low)/*从EEPROM或CCR任意地址中读一个字节数据*/
{
write_byte(slave);
rec_ack();
write_byte(high);
rec_ack();
write_byte(low);
rec_ack();
}
/******************************************************/
/* 读X1228芯片,将年月日时分秒赋值给相应的全局变量 */
/* year month day hour minute second */
/******************************************************/
void read_time()
{ start();
read(0xde,0x00,0x35);/*假写,指定要读内容的地址,读地址0x0035的内容,年*/
start();
year=rec_dat();
stop();
start();
read(0xde,0x00,0x34);/*假写,指定要读内容的地址,读地址0x0034的内容,月*/
start();
month=rec_dat();
stop();
start();
read(0xde,0x00,0x33);/*假写,指定要读内容的地址,读地址0x0033的内容,日*/
start();
day=rec_dat();
stop();
start();
read(0xde,0x00,0x32);/*假写,指定要读内容的地址,读地址0x0032的内容,时*/
start();
hour=rec_dat()-0x80; /*最高位为1,表示时间是24小时制的,读取时间应减去这一位*/
stop();
start();
read(0xde,0x00,0x31);/*假写,指定要读内容的地址,读地址0x0031的内容,分*/
start();
minute=rec_dat();
stop();
start();
read(0xde,0x00,0x30);/*假写,指定要读内容的地址,读地址0x0030的内容,秒*/
start();
second=rec_dat();
stop();
}
/**************************************************/
/* 通过按键,修改X1228芯片数据,设置时间 */
/* 改变全局变量year month day hour minute */
/* seri_num age area等 */
/* 并将修改值发送到X1228芯片 */
/**************************************************/
void set_time()
{
;
}
void set_zhi()
{
;
}
/**************************************************************************************/
/* */
/* 主程序 */
/* */
/**************************************************************************************/
void main ()
{
unsigned char a,b,c,d;
unsigned char n;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -