📄 qq.c
字号:
}
key_data_update=false;
}
}
else if (menu = zero_zero)
{
if (key_data_update==set)
{
while (reflush!=data_reflush) x25045_feed();
chiefdata = count_image/circle_init;
reflush = false;
if (globe - chiefdata >= zero_zero_set)
{
x25045_feed();
x25045_write_word(gas_zero_address,chiefdata);
x25045_write_word((gas_zero_address+2),0);
x25045_write_word((gas_zero_address+4),max_f);
x25045_write_word((gas_zero_address+6),max_l);
x25045_write_word(gas_set_all,1);
menu = menu_set;
}
else
{
dispdata[0] = dis_off; /*数码管全灭*/
dispdata[1] = dis_off;
dispdata[2] = dis_off;
dispdata[3] = dis_off;
display();
delay(hold_flash_time);
}
}
}
else if (menu==menu_set)
{
x25045_feed();
if (key_data_update)
{
if (key_data_update==255)
{
menu=menu_main;
if (index>0)
x25045_write_word(gas_set_all,index);
}
else if (key_data_update==alt)
{
while (reflush!=data_reflush) x25045_feed();
reflush=false;
chiefdata = count_image/circle_init;
chiefdata = max_f-chiefdata;
dis();
delay(hold_flash_time);
delay(hold_flash_time);
}
else if (key_data_update==set)
{
while (reflush!=data_reflush) x25045_feed();;
reflush=false;
chiefdata = count_image/circle_init;
chiefdata = max_f-chiefdata;
x25045_write_word((gas_set_address+4*index),chiefdata);
chiefdata=chiefdata;
dispdata[0] = dis_off; /*数码管全灭*/
dispdata[1] = dis_off;
dispdata[2] = dis_off;
dispdata[3] = dis_off;
display();
delay(hold_flash_time);
dis();
delay(hold_flash_time);
delay(hold_flash_time);
chiefdata=temp;
dis();
delay(hold_flash_time);
delay(hold_flash_time);
dispdata[0] = dis_off; /*数码管全灭*/
dispdata[1] = dis_off;
dispdata[2] = dis_off;
dispdata[3] = dis_off;
display();
delay(hold_flash_time);
x25045_write_word((gas_set_address+4*index+2),temp);
index++;
x25045_write_word((gas_set_address+4*index),max_f);
x25045_write_word((gas_set_address+4*index+2),max_l);
}
key_data_update=false;
}
}
}
void display_init() /*显示初始化*/
{
menu = menu_main;
temp = 1;
}
void menu_main_dis()
{
switch(temp)
{
case menu_max: dispdata[3]=0x9E ;dispdata[2]=0x13 ;dispdata[1]= 0x11;dispdata[0]= 0x93; break; /*max*/
case menu_zero: dispdata[3]=0x24 ;dispdata[2]=0x27; dispdata[1]= 0x61;dispdata[0]=0x0f5; break; /*zer*/
case menu_min: dispdata[3]=0x0c ;dispdata[2]=0x13 ;dispdata[1]= 0x0f;dispdata[0]=0xd5 ; break; /*min*/
case menu_set: dispdata[3]=0x98 ;dispdata[2]=0x49 ;dispdata[1]= 0x61;dispdata[0]= 0x73; break; /*set*/
default: dispdata[3]=0x9E ;dispdata[2]=0x13 ;dispdata[1]= 0x11;dispdata[0]= 0x93; temp=1; break; /*max*/
}
display();
delay(20);
}
void display_srv() /*显示服务程序*/
{
switch (menu)
{
case menu_main: menu_main_dis(); break;
case menu_max: bin_bcd(temp); bcd_dis_four();dispdata[3]=0x9e;display(); break;
case menu_zero: bin_bcd(chiefdata); bcd_dis_four();dispdata[3]=0x24;display(); break;
case menu_min: bin_bcd(temp); bcd_dis_four();dispdata[3]=0x0c;display(); break;
case menu_set: bin_bcd(temp); bcd_dis_four();dispdata[3]=0x98;display(); break;
case zero_zero: bin_bcd(0); bcd_dis_four();dispdata[3]=0x98;display(); break;
default: menu_main_dis(); break;
}
delay(20);
}
void key_data() /*键盘数据扫描程序*/
{
x25045_feed();
//if(key==mode)
// {
// key_data_update=mode;
///while (key==mode) x25045_feed();;
// delay(10);
// times=0; /*按键加速计数器清零*/
// }
if(key==255)
{
key_data_update=255;
///while (key==mode) x25045_feed();;
delay(10);
times=0; /*按键加速计数器清零*/
}
else if(key==alt-1)
{
key_data_update=alt;
delay(10);
times=0; /*按键加速计数器清零*/
}
else if(key==up-1) /*加*/
{
if(times<15) {times++;temp++;delay(200);;}
else if(times<150) {times++;temp++;delay(15);}
else {times=151;temp++;delay(5);}
if(temp>maxdata){temp=0;}
if (menu==menu_main) {if(temp> menu_set){temp=1;} }
}
else if(key==down-1) /*减*/
{
if(times<15) {times++;temp--;delay(200);}
else if(times<150) {times++;temp--;delay(15);}
else {times=151;temp--;delay(5);}
if(temp>maxdata){temp=maxdata;}
if (menu==menu_main) {if(temp<1){temp= menu_set;} }
}
else if(key==set-1) /*确认*/
{
key_data_update = set;
while (key==set-1) x25045_feed();;
delay(10);
times=0;
}
else times=0; /*按键加速计数器清零*/
}
/*标定程序****最主要的一个键盘服务程序*/
/*按键处理模块结束+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*x25045模块开始++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void x25045_outb(uchar outdata) //单片机向X25045写数据函数
{uchar i;
for(i=1;i<=8;i++) //上升沿输入数据
{x25045_sck=0;
outdata=outdata<<1;
x25045_si=CY;
x25045_sck=1;
}
x25045_si=0;
}
uchar x25045_inb() //X25045输出数据给单片机函数
{
uchar i,j,k=0;
for (i=1;i<=8;i++)
{x25045_sck=1; //下降沿输出数据测试
x25045_sck=0;
j=(x25045_so==1)?1:0; //SO端口数据为1则J=1,否则J=0
k=(k<<1)|j;
}
return(k);
}
uchar x25045_rdsr() //单片机向X25045写入读状态寄存器指令(RDSR),并读状态寄存器值
{uchar i;
x25045_sck=0;
x25045_cs=0;
x25045_outb(0x05); //写入读状态寄存器指令(RDSR)
i=x25045_inb(); //读状态寄存器值
x25045_sck=0;
x25045_cs=1;
return i;
}
void x25045_wipp()
{uchar i;
uchar j;
for (i=1;i<=99;i++)
{
j=x25045_rdsr();
if ((j&0x01)==0) /*判断是否wip=0,即判断是否写入过程已经结束,若结束就跳出,否则继续等待直到达到99次*/
{break;}
}
}
void x25045_wren() /*初始化函数之一,写使能函数*/
{ x25045_sck=0;
x25045_cs =0;
x25045_outb(0x06);
x25045_sck=0;
x25045_cs=1;
}
void x25045_wrdi() /*初始化函数之一,写不使能函数*/
{ x25045_sck=0;
x25045_cs =0;
x25045_outb(0x04);
x25045_sck=0;
x25045_cs=1;
}
void x25045_wrsr() /*初始化函数之一,写状态寄存器*/
{ x25045_sck=0;
x25045_cs =0;
x25045_outb(0x01);
x25045_outb(0x00); /*看门狗时间设置*/
x25045_sck=0;
x25045_cs=1;
x25045_wipp();
}
void x25045_wrbt(uint address,uchar indata) /*写数据函数*/
{x25045_sck=0;
x25045_cs=0;
//x25045_outb((((uchar)(address-0xff))<<3)|0x02);/* send write instruction including msb of address */
x25045_outb(((uchar)(address>>5)&0x08)|0x02);
/*将高位地址左移3位与写入先导字相或,得到正确的先导字写入25045*/
x25045_outb((uchar)(address));
/*输出低位地址到25045*/
x25045_outb(indata);
/*写入数据到25045的对应单元*/
x25045_sck=0;
x25045_cs=1;
x25045_wipp();
/*检测是否写完*/
}
void x25045_write_word(uint address,uint indata) /*写双字函数*/
{
uint error;
uchar i;
union word_bytes tb1;
tb1.word=indata;
x25045_wren();
x25045_wrbt(address,tb1.bytes.b0);
x25045_wren();
x25045_wrbt(address+1,tb1.bytes.b1);
x25045_wrdi();
error=x25045_read_word(address);
while (error!=indata)
{
x25045_feed();
for (i=0;i<3;i++)
{
x25045_wren();
x25045_wrbt(address,tb1.bytes.b0);
x25045_wren();
x25045_wrbt(address+1,tb1.bytes.b1);
x25045_wrdi();
}
error=x25045_read_word(address);
}
}
uchar x25045_rdbt(uint address) /*读数据函数*/
{uchar outdata;
x25045_sck=0;
x25045_cs=0;
// x25045_outb((((uchar)(address-0xff))<<3)|0x03);/* send write instruction including msb of address */
x25045_outb(((uchar)(address>>5)&0x08)|0x03);
/*将高位地址左移3位与写入先导字相或,得到正确的先导字写入25045*/
x25045_outb((uchar)(address));
/*输出低位地址到25045*/
outdata=x25045_inb();
/*写入数据到25045的对应单元*/
x25045_sck=0;
x25045_cs=1;
return(outdata);
}
uint x25045_read_word(uint address) /*读双字函数*/
{union word_bytes tb1;
tb1.bytes.b0=x25045_rdbt(address);
tb1.bytes.b1=x25045_rdbt(address+1);
return(tb1.word);
}
void x25045_feed() /*喂狗*/
{ x25045_cs=0;
_nop_();
x25045_cs=1;
}
void x25045_init() /*初始化*/
{
x25045_wren();
x25045_wrsr();
x25045_wrdi();
}
/*x25045模块结束++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#ifdef clear
void do_clear()
{
uchar i;
for (i=0;i<100;i++)
{
x25045_feed();
x25045_write_word(i*2,0);
chiefdata=x25045_read_word(i*2);
dis();
while (chiefdata!=0){x25045_write_word(i*2,0);chiefdata=x25045_read_word(i*2);}
}
}
#endif
#ifdef check
void do_check()
{
while (1)
{
chiefdata=key;
dis();
P0=255;
delay(500);
mode_led = led_on;
delay(500);
run_led = led_on;
delay(500);
eror_led = led_on;
delay(500);
current_led= led_on;
delay(500);
hold_led= led_on;
delay(500);
min_led= led_on;
delay(500);
}
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -