辅导LED C程序、辅导C、辅导IO20--IO23 调试Matlab程序|辅导留学生Prolog
/*
:
1、EDAIO20--IO23CH451DOUT、DCLK、DIN、LOAD。
:
,,,LED。
*/
//--------------------------------------------------------
#include
#include
#include "io.h"
#include "system.h"
#define CH451_RESET 0x0201//
#define CH451_LEFTMOV 0x0300//-
#define CH451_LEFTCYC 0x0301//
#define CH451_RIGHTMOV 0x0302//
#define CH451_RIGHTCYC 0x0303//
#define CH451_SYSOFF 0x0400 //、、
#define CH451_SYSON1 0x0401 //
#define CH451_SYSON2 0x0403 //、
#define CH451_SYSON3 0x0407 //、、
#define CH451_DSP 0x0500 //
#define CH451_BCD 0x0580 //BCD
#define CH451_TWINKLE 0x0600 //
#define CH451_DIG0 0x0800 //0
#define CH451_DIG1 0x0900 //1
#define CH451_DIG2 0x0a00 //2
#define CH451_DIG3 0x0b00 //3
#define CH451_DIG4 0x0c00 //4
#define CH451_DIG5 0x0d00 //5
#define CH451_DIG6 0x0e00 //6
#define CH451_DIG7 0x0f00 //7
#define LOAD_CLR IO_INI(0,0)
#define LOAD_SET IO_INI(1,0)
#define DIN_CLR IO_INI(0,1)
#define DIN_SET IO_INI(1,1)
#define DCLK_CLR IO_INI(0,2)
#define DCLK_SET IO_INI(1,2)
void IO_INI(unsigned char data,unsigned char name)
{
unsigned char temp;
if(data) temp = temp|(1< else temp = temp&(~(1< IOWR(LED_PIO_BASE,0,temp);
}
unsigned char ch451_key; //
unsigned char keycodebuf[16]={0x40, 0x41, 0x42, 0x43,
0x48, 0x49, 0x4A, 0X4B,
0X50, 0X51, 0X52, 0X53,
0X58, 0X59, 0X5A, 0X5B};
unsigned char realcodebuf[16]={0x3F, 0x06, 0x5B, 0x4F,
0x66, 0x6D, 0x7D, 0X07,
0X7F, 0X6F, 0X77, 0X7C,
0X39, 0X5E, 0X79, 0X71};
unsigned char ch451_key;
unsigned char count = 0;
//
unsigned char getkey(unsigned char Key);
/**********************************************************************************************************
:
:
:
:
**********************************************************************************************************/
unsigned char getkey(unsigned char Key)
{
unsigned char i;
for(i=0;i<16;i++)
{
if(Key == keycodebuf[i])
{
return i;
}
}
}
/**********************************************************************************************************
:CH451
:
:
:
**********************************************************************************************************/
void ch451_init(void)
{
DIN_CLR; //,4
DCLK_SET;
DIN_SET;
LOAD_SET;
}
/**********************************************************************************************************
:
:
:
:
**********************************************************************************************************/
void ch451_write(unsigned int command)//12B
{
unsigned char i;
LOAD_CLR; //
for(i=0;i<12;i++) //12,
{
if((command&1)==0x01)
DIN_SET;
else DIN_CLR;
DCLK_CLR;
command>>=1;
DCLK_SET; //
}
LOAD_SET; //
}
unsigned char Receive451(void)
{
unsigned char i;
unsigned char command,keycode;//、
command=0x07; //40111B
LOAD_CLR; //
for(i=0;i<4;i++)
{
if((command&1)==0x01)
DIN_SET;
else DIN_CLR; //,
DCLK_CLR;
command>>=1; //
DCLK_SET; // ch451
}
LOAD_SET; //ch451
keycode=0; //keycode
for(i=0;i<7;i++)
{
keycode<<=1; //,,
keycode|=IORD(BUTTON_PIO_BASE,0)& 0x01;
DCLK_CLR; //ch451
DCLK_SET;
}
//ch451_key = keycode; //
return keycode;
}
unsigned char read_KEY() //BUTTON[0]
{
unsigned char value=0;
value = IORD(BUTTON_PIO_BASE,0)& 0x01;
return value;
}
/**********************************************************************************************************
:main
:
:
:
**********************************************************************************************************/
void main(void)
{
unsigned char key = 0;
IOWR(LED_PIO_BASE,1,0x0f);
ch451_init();
ch451_write(CH451_RESET); //
ch451_write(CH451_SYSON2); //
ch451_write(CH451_DSP); //
//
ch451_write(CH451_DIG0|0x00);
ch451_write(CH451_DIG1|0x00);
ch451_write(CH451_DIG2|0x00);
ch451_write(CH451_DIG3|0x00);
ch451_write(CH451_DIG4|0x00);
ch451_write(CH451_DIG5|0x00);
ch451_write(CH451_DIG6|0x00);
ch451_write(CH451_DIG7|0x00);
printf("\n");
while(1)
{
if( read_KEY() == 0x00) //
{
ch451_key = Receive451();
key = getkey(ch451_key) ; // 16
ch451_write(CH451_LEFTMOV); //
ch451_write(CH451_DIG0|realcodebuf[key]); //
}
}
}