📄 7289.c
字号:
//////////////////////////////////////////////////////////////////////////
// /cs -- IOB12 //
// clk -- IOB13 //
// data -- IOB14 //
// /key -- IOB15 //
// by ouc //
// 2005.9.1 //
// 使用时在主程序里面加上 #include "7289.h"
// 注释后加 ; 的为自己注释 07.7.28 //
//////////////////////////////////////////////////////////////////////////
#include "SPCE061A.h"
void delay(unsigned int time_counter);
////////////////////////////////////////
//void dis_play1(unsigned int aa) // 写指令和写数据函数
//{
//unsigned int i,k;
//for(i=0;i<8;i++)
//{
// aa<<i;
//if( k&0x80)
//*P_IOB_Data |= 0x4000;
//else *P_IOB_Data |= 0x0000;
//*P_IOB_Data |= 0x2000; // clk high将CLK置1。且不影响其他位
//delay(3); // 延时
//*P_IOB_Data &= 0xdfff; // clk low CLK为低电平
//}
//}
/////////////////////////////////////////////
void send(unsigned int data)
{
unsigned int i,a;
*P_Watchdog_Clear = 0x0001;
*P_IOB_Dir |= 0x4000; // B14(data)为带数据缓存器的高电平输出。
*P_IOB_Attrib |= 0x4000;
*P_IOB_Data |= 0x4000;
data &= 0x00ff; //取data的低八位
data = data << 7;
*P_IOB_Data &= 0xdfff; // clk low CLK为低电平
*P_IOB_Data &= 0xefff; // cs low B12(CS)为低电平
delay(3);
for(i=0; i<8; i++)
{
a = data;
a &= 0x4000;//保留data的14位,其他的全为零
*P_IOB_Data &= 0xbfff; // IOB14 = 0,其他的不变。
*P_IOB_Data |= a;//将data的14位送给IOB14,并不影响IOB的其他位。
*P_IOB_Data |= 0x2000; // clk high 送数据;
delay(3);
*P_IOB_Data &= 0xdfff; // clk low 产生高电平宽度为delay(3)的脉冲,供CLK(8次)。
delay(3);//延迟,清看门狗???
data = data << 1; //每次只送一位;
}
}
unsigned int receive(void)
{
unsigned int i,j,a,b;
*P_Watchdog_Clear = 0x0001;
*P_IOB_Dir &= 0xbfff; // data_changeto_input()让IOB14为带下拉电阻的输入,且不影响其他位
*P_IOB_Attrib &= 0xbfff;
*P_IOB_Data &= 0xbfff;
j = 7;
a = 0x0000;
for(i=0; i<8; i++,j++)
{
b = 0x4000;
*P_IOB_Data |= 0x2000; // clk high将CLK置1。且不影响其他位,
delay(1);
b &= *P_IOB_Data;//取出data (IOB14)的数据。
b >>= j;
a |= b;
*P_IOB_Data &= 0xdfff; // clk low
delay(1);
}
*P_IOB_Data |= 0x1000; //cs high
delay(7);
return a;
}
void display_7289(unsigned int *p)
{
unsigned int i,command_out;
unsigned int *data;
data = p;
//command_out=0x0080;
command_out=0x0084; //自己改的
for(i=0; i<8; i++)
{
send(command_out);
command_out++;
send(data[i]);
*P_IOB_Data |= 0x1000; //cs high
delay(1);
}
*P_IOB_Data |= 0x1000; //cs high
delay(7);
}
void display_led(unsigned int led_addr,unsigned int value)
{
send(led_addr);
send(value);
*P_IOB_Data |= 0x1000; //cs high
delay(3);
}
void display_pos(float x1,float x2)
{
unsigned int temp;
unsigned int flag_hide=0xff;
temp=((int)x1)/0x0a;
if(temp!=0)
{
flag_hide=flag_hide|0x40;
display_led(0x98,flag_hide);
display_led(0x86,temp);
}
else
{
flag_hide=flag_hide&0xbf;
display_led(0x98,flag_hide);
}
display_led(0x86,temp);
temp=((int)x1)%0x0a+0x80;
display_led(0x85,temp);
temp=((int)(x1*10.0))%10;
display_led(0x84,temp);
temp=((int)x2)/0x64;
if(temp!=0)
{
flag_hide=flag_hide|0x08;
display_led(0x98,flag_hide);
display_led(0x83,temp);
}
else
{
flag_hide=flag_hide&0xf7;
display_led(0x98,flag_hide);
}
temp=(((int)x2)/0x0a);
if(temp!=0)
{
if(temp!=0x0a)
{
flag_hide=flag_hide|0x04;
display_led(0x98,flag_hide);
display_led(0x82,temp);
}
else
{
flag_hide=flag_hide|0x04;
display_led(0x98,flag_hide);
display_led(0x82,0x00);
}
}
else
{
flag_hide=flag_hide&0xfb;
display_led(0x98,flag_hide);
}
temp=((int)x2)%0x0a+0x80;
display_led(0x81,temp);
temp=((int)(x2*10.0))%10;
display_led(0x80,temp);
}
int calc_keyvalue(unsigned int keybuf)
{
unsigned int keyvalue;
switch(keybuf)
{
case 28:
keyvalue = 1; break;
case 29:
keyvalue = 2; break;
case 30:
keyvalue = 3; break;
case 31:
keyvalue = 4; break;
case 20:
keyvalue = 5; break;
case 21:
keyvalue = 6; break;
case 22:
keyvalue = 7; break;
case 23:
keyvalue = 8; break;
case 12:
keyvalue = 9; break;
case 13:
keyvalue = 0; break;
case 14:
keyvalue = 10; break;
case 15:
keyvalue = 11; break;
case 04:
keyvalue = 12; break;
case 05:
keyvalue = 13; break;
case 06:
keyvalue = 14; break;
case 07:
keyvalue = 15; break;
default: keyvalue = 20;
break;
}
return keyvalue;
}
void delay(unsigned int loop_counter)
{
while(loop_counter--)
;
*P_Watchdog_Clear = 0x0001;
}
void long_delay(void)
{
unsigned int i = 15;
while(i--)
;
*P_Watchdog_Clear = 0x0001;
}
void reset(void)
{
send(0xa4);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -