📄 dc_current_souce.c.bak
字号:
#include<reg51.H>
#include<absacc.h>
#include<intrins.h>
#define uchar unsigned char
sbit CS=P1^0;
sbit CLK=P1^1;
sbit DIO=P1^2;
unsigned char KeyCode; //键盘值
char dispbuff[8]; //显示缓存
unsigned int volatile keybuf[4]; //键盘读数频率值
char volatile i; //位标志
bit volatile set; //设置键标志
unsigned int control; //频率字
unsigned char keycontrol; //频率缓存
char ReadKB(); //读键盘
void sent(unsigned char sent_buf); //向7289发数据
void delay(unsigned char time)reentrant; //延时
void display(unsigned char k)reentrant; //显示
void transkey1(void); //将所设定的数值转化为控制字(10进制转16进制)
void dis_control(unsigned char keycontrol)reentrant; //显示控制如:左移,右移,显示setting
void KeyBoard() interrupt 2 //键盘辨别
{ EX1=0;
KeyCode=ReadKB(); //读键盘
if(KeyCode==0x0f) //======判断是否是设置键按下
{
set=1;
i=0;
keycontrol=0xa4; //复位
dis_control(keycontrol);
dispbuff[6]=0x0f;
display(6);
goto loop1;
}
else if(set) //======只有当设置键按下才判断
{
if(KeyCode==0x0e) //确定键
{ set=0;
if(i) //只有当I不为0时才发送
{
transkey1(); //将所设定的数值转化为控制字(10进制转16进制)
if(control>2000)
goto loop1;
}
goto loop1;
}
if((KeyCode<=9)&&(KeyCode>=0)&&(i<4))
{
keycontrol=0xa0;
dis_control(keycontrol); //显示左移一位
keybuf[i]=KeyCode;
dispbuff[7]=keybuf[i];
display(7);
i++;
goto loop1;
}
if((KeyCode==0x0d)&&(i>0)) //删除一位,
{
keycontrol=0xa1; //第一个显示变黑,右移一位
dis_control(keycontrol);
i--;
goto loop1;
}
goto loop1;
}
loop1: EX1=1;
}
main()
{
unsigned int time;
char m;
EX1=1;
EA=1;
IT1=1;
set=0;
i=0;
keycontrol=0xa4; //复位
dis_control(keycontrol);
control=0;
dispbuff[2]=0x09;
display(2);
dispbuff[3]=0x00;
display(3);
dispbuff[4]=0x00;
display(4);
dispbuff[5]=0x0D;
display(5);
for(time=0;time<800;time++)
delay(100);
while(1)
{
if(!set)
{ keycontrol=0xa4; //复位
dis_control(keycontrol);
if(control<2000)
{
dispbuff[7]=0;
display(7);
dispbuff[6]=0;
display(6);
dispbuff[5]=0;
display(5);
dispbuff[4]=0;
display(4);
for(time=0;time<800;time++)
delay(200);
}
else if(control>2000)
{
for(m=0;m<i+1;m++)
{
keycontrol=0xa0;
dis_control(keycontrol); //显示左移一位
dispbuff[7]=keybuf[m];
display(7);
}
for(time=0;time<800;time++)
delay(200);
}
}
//for(time=0;time<800;time++)
// delay(200);
}
}
char ReadKB() //读键盘
{ char kb=0,i;
CS=1;
CLK=0;
delay (50);
sent(0x15);//发送读键盘指令
delay(10);
DIO=1; //要读dio的值,必须先对其置一。
CLK=1;
delay(50);
for(i=0;i<8;i++)
{CLK=0;
kb=kb*2+(char)DIO;//读1位数据
delay(10);
CLK=1;
delay(10);
}
CS=1;
return(kb);
}
void sent(unsigned char sent_buf) //发送数据
{
char i;
CLK=0; /*置SPI时钟线为低*/
CS=0; /*置SPI片选线为低*/
delay (50); /*延时50us*/
for(i=0;i<8;i++) /*发送8位数据*/
{
sent_buf=sent_buf<<1; /*从数据最高位开始,将要发发送的数据位移入进位位CY*/
DIO=CY; /*数据位送数据线*/
CLK=1; /* 置SPI时钟线为高*/
delay (10); /*延时10us*/
CLK=0; /* 置SPI时钟线为低,发送完1位数据*/
delay (10);/*延时10us*/
}
DIO=0;//为何dio清零??
}
void delay(unsigned char time) reentrant //延时
{
unsigned char i;
for(i=0;i<time;i++);
}
void display(unsigned char k)reentrant //显示
{
CS=1;
sent(0xc8+k);
sent(dispbuff[k]);
CS=1;
}
void transkey1(void) //将所设定的数值转化为控制字(10进制转16进制)
{
//i--;
for(;i<1;i--)
control=control*0x0a+keybuf[i];
}
void dis_control(unsigned char keycontrol)reentrant //控制显示函数(可再入)
{
// CS=1;
sent(keycontrol);
CS=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -