求一个好的ch451控制程序。我在网上找了几个不太好用的。求高手使用,给20分!

/*粘贴下面的文件,命名为CH451.h,在你的程序前面写上# include“ch 451 . h”,就可以使用下面的函数了。在main函数中,必须初始化CH451,也就是先写CH451_Init()。

有三种方法可以写出你想展示的东西。

//LED _ printf(uchar * LED _ Data);//被添加数据的字符串地址,例如:ucharled [8] = {7,6,5,4,3,2,1,0 };

LED_printc(uchar p,uchar LED _ data);//对于单个数据显示,第一位是位置,第二位是数值,例如:LED_printc(2,3);

LED_prints(无符号char * LED _ string);//直接显示字符串地址。

最简单的LED _ prints(" 1234567 ");

而下面最重要的pin需要更换。

怎么换连接?

*/

#ifndef __CH451_H__

#define __CH451_H__

/*

//LED _ printf(uchar * LED _ Data);//添加数据的字符串地址,例如:ucharled [8] = {7,6,5,4,3,2,1,0 };

LED_printc(uchar p,uchar LED _ data);//对于单个数据显示,第一位是位置,第二位是数值,例如:LED_printc(2,3);

LED_prints(无符号char * LED _ string);//直接显示字符串地址,例如:LED _ prints(" 123456 ");

*/

/************************************************************/

# include & ltreg52.h & gt

#定义uint无符号整数

#定义uchar无符号字符

#定义CH451 _ dig 00x 0800//定义ch 451的输出引脚。

#定义CH451_DIG1 0x0900

#定义CH451_DIG2 000

#定义CH451_DIG3 0x0b00

#定义CH451_DIG4 0x0c00

#define CH451_DIG5 0x0d00

#define CH451_DIG6 0x0e00

#define CH451_DIG7 0x0f00

sbit dout=p1^4;//串行接口数据输出

sbit load=p1^5;//串行数据加载

sbit din//串行数据输入

sbit dclk=p1^7;//串行数据时钟线

uchar key=1,key old = 2;

/* * * * * * * * * * * * * * * * * * * * m2t 1板的BCD转换* * * * * * * * * * * *

文件名:无符号字符BCD[]

功能:因为SEG0~7不对应a~dp,所以编程驱动转换。

入口参数:无

导出参数:无

************************************************************/

无符号字符码BCD[]={0x77,0x21,0x5d,0x6d,//0,1,2,3,

0x2b,0x6e,0x7e,0x25,//4,5,6,7,

0x7f,0x6f,0x3f,0x7a,//8,9,a,b,

0x58,0x79,0x5e,0x1e,//c,d,e,f,

0x00,0xda,0x24,0x BC };//0x10无显示,0x11度,0x12双点,0x13 _ n。

/* * * * * * * * * * * * * * * * * * * *发送指令至CH451 * * * * * * * * * * * * * * * *

名称:Voidch451 _ write (uintdat,uintlength)

功能:发送指令到CH451。

Entry参数:uint dat需要发送的指令。

uint长度发送指令(dat)的长度。

导出参数:无

************************************************************/

void CH451_Write(无符号dat) //uint长度

{

uint I;

荷载= 1;//串行数据加载端子设置为1。

for(I = 12;我& gt0;我-)

{

DCLK = 0;//串行数据时钟线设置为0。

if((dat & amp;0x 001)= = 0x 001)//确定数据的最低位是否为1。

DIN = 1;//如果数据的最低位是1,则将1写入din(串行数据输入)。

否则DIN = 0;//如果数据的最低位为0,则将0写入din(串行数据输入)。

DCLK = 1;//将串行数据时钟线设置为1。

dat = dat & gt& gt1;//数据向右移动一位。

}

负载= 0;//串行数据加载端子设置为1。

荷载= 1;//给load一个上升沿,将所有数据导入CH451。

}

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

名称:void led _ display(led _ data 1,led _ data2,led _ data3,led _ data4,

LED_Data5、LED_Data6、LED_Data7、LED_Data8)

功能:数字显示水平位置转换

入口参数:led _ data1,led _ data2,led _ data3,led _ data4,led _ data5,

led _ data6、led _ data7和led _ data8显示的代码。

导出参数:无

************************************************************/

void LED_printf(uchar *LED_Data)

{

ch 451 _ Write(ch 451 _ dig 0 | BCD[LED _ Data[7]]);//第8位显示,LED_Data8位想显示什么。

ch 451 _ Write(ch 451 _ dig 1 | BCD[LED _ Data[6]]);//第7位数字显示

ch 451 _ Write(ch 451 _ dig 2 | BCD[LED _ Data[5]]);//第6位数字显示

ch 451 _ Write(ch 451 _ dig 3 | BCD[LED _ Data[4]]);//第5位数字显示

ch 451 _ Write(ch 451 _ dig 4 | BCD[LED _ Data[3]]);//第四位数字显示

ch 451 _ Write(ch 451 _ dig 5 | BCD[LED _ Data[2]]);//第三位数字显示

ch 451 _ Write(ch 451 _ dig 6 | BCD[LED _ Data[1]);//第二个显示器

ch 451 _ Write(ch 451 _ dig 7 | BCD[LED _ Data[0]]);//1位显示

}

void LED_printc(uchar p,uchar LED_data)

{开关(p){

情况8:ch 451 _ Write(ch 451 _ dig 0 | BCD[LED _ data]);打破;//第8位显示,LED_Data8位想显示什么。

情况7:ch 451 _ Write(ch 451 _ dig 1 | BCD[LED _ data]);打破;//第7位数字显示

情况6:ch 451 _ Write(ch 451 _ dig 2 | BCD[LED _ data]);打破;//第6位数字显示

情况5:ch 451 _ Write(ch 451 _ dig 3 | BCD[LED _ data]);打破;//第5位数字显示

情况四:ch 451 _ Write(ch 451 _ dig 4 | BCD[LED _ data]);打破;//第四位数字显示

情况三:ch 451 _ Write(ch 451 _ dig 5 | BCD[LED _ data]);打破;//第三位数字显示

情况二:ch 451 _ Write(ch 451 _ dig 6 | BCD[LED _ data]);打破;//第二个显示器

案例1:ch 451 _ Write(ch 451 _ dig 7 | BCD[LED _ data]);打破;//1位显示

}

}

void LED_prints(无符号字符*led_string)

{

无符号字符I = 0;

while(led_string[i]!=0x00)

{ if(led _ string[I]& gt;= ' 0 ' & amp& ampled _ string[I]& lt;='9')

LED_printc(i+1,LED _ string[I]-0x 30);

else if(led _ string[I]& gt;= ' a ' & amp& ampled _ string[I]& lt;='z ')

LED_printc(i+1,LED _ string[I]-' a '+10);

i++;

}

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

文件名:void KeyStart()

功能:发送0111到DIN。

入口参数:无

导出参数:无

************************************************************/

void KeyStart()

{ uint i,dat = 0x07

荷载= 1;//串行数据加载端子设置为1。

for(I = 4;我& gt0;我-)

{

DCLK = 0;//串行数据时钟线设置为0。

if((dat & amp;0x 001)= = 0x 001)//确定数据的最低位是否为1。

DIN = 1;//如果数据的最低位是1,则将1写入din(串行数据输入)。

否则DIN = 0;//如果数据的最低位为0,则将0写入din(串行数据输入)。

DCLK = 1;//将串行数据时钟线设置为1。

dat = dat & gt& gt1;//数据向右移动一位。

}

负载= 0;//串行数据加载端子设置为1。

荷载= 1;//给load一个上升沿,将所有数据导入CH451。

}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

文件名:CH451_ReadChange()

功能:将输入的7位转换成数字。

入口参数:无

导出参数:无

************************************************************/

CH451_ReadChange(uint dat)

{ uint a;

开关(dat)

{

案例0x7f:a = 0;打破;//0键按键。

案例0x7e:a = 1;打破;//1按键。

案例0x7d:a = 2;打破;//2按键。

案例0x7c:a = 3;打破;//3按键。

案例0x7b:a = 4;打破;//4按键。

案例0x7a:a = 5;打破;//5按键。

案例0x 79:a = 6;打破;//6按键。

案例0x 78:a = 7;打破;//7按键。

/*

案例0x3f:a = 10;打破;//0键释放键

案例0x3e:a = 11;打破;//1键释放键

案例0x3d:a = 12;打破;//2键释放键

案例0x3c:a = 13;打破;//3键释放键

案例0x3b:a = 14;打破;//4键释放键

案例0x3a:a = 15;打破;//5键释放键

案例0x 39:a = 16;打破;//6键释放键

案例0x 38:a = 17;打破;//7键释放键

*/

默认:a = 8;打破;

}

返回a;

}

/* * * * * * * * * * * * * * * * * * ch 451 _ read()* * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

文件名:CH451_Read()

功能:传输输入的7位数字。

条目参数:键

导出参数:键值00~07 10~17。

************************************************************************/

CH451_scan()

{ uint i,dat = 0;

key start();

for(I = 7;我& gt0;我-)

{ DCLK = 1;

if(DOUT==1)

dat = dat | 0x 01;

DCLK = 0;

dat = dat & lt& lt1;

}

dat = dat & gt& gt1;

DOUT = 1;

dat = ch 451 _ read change(dat);

key = dat

如果(关键!=8)

keyold = key

返回dat

}

/* * * * * * * * * * * * * * * * ch 451初始化* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

名称:void CH451_Init()

功能:CH451初始化,设置CH451选择4线串行接口。

入口参数:无

导出参数:无

************************************************************/

void CH451_Init()

{

DIN = 0;//为DIN设置高电平,CH451,选择4线串行接口。

DIN = 1;

DCLK = 1;//设置为默认高电平。

荷载= 1;

DOUT = 1;//设置为输入

ch 451 _ Write(0x 403);//设置系统参数并启用数字显示。

ch 451 _ Write(0x 508);//最后一位是亮度级别。

}

#endif