‘壹’ 求一个好使的 ch451 控制程序 自己在网上找了几个 都不怎么好用 求高手 好用给20分!
/*将下面文件粘贴,起名为 CH451.h 并存在你写的程序文件夹下 在你的程序前写#include"CH451.h"就可以用下面的函数了,在主函数中必须先初始化CH451,即先写 CH451_Init();
再写你要显示的内容,有三种方法如下
// LED_printf(uchar *LED_Data); //添加数据的字符串地址 例如:uchar led[8]={7,6,5,4,3,2,1,0};
LED_printc(uchar p,uchar LED_data); //对单个数据显示 第一位是位置,第二位是数值 例如:LED_printc(2,3);
LED_prints(unsigned char *led_string); //直接显示字符串地址
最简单的 LED_prints("1234567");
还有最总要的下面的管脚需要改
怎么连的怎么改
*/
#ifndef __CH451_H__
#define __CH451_H__
/*
// LED_printf(uchar *LED_Data); //添加数据的字符串地址 例如:uchar led[8]={7,6,5,4,3,2,1,0};
LED_printc(uchar p,uchar LED_data); //对单个数据显示 第一位是位置,第二位是数值 例如:LED_printc(2,3);
LED_prints(unsigned char *led_string); //直接显示字符串地址 例如:LED_prints("123456");
*/
/************************************************************/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
#define CH451_DIG0 0x0800 //对CH451输出管脚进行定义
#define CH451_DIG1 0x0900
#define CH451_DIG2 0x0a00
#define CH451_DIG3 0x0b00
#define 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 =P1^6; //串行数据输入
sbit DCLK=P1^7; //串行数据时钟线
uchar key=1,keyold=2;
/************************针对m2t1板BCD转换*******************
文件名:unsigned char BCD[]
功能:由于SEG0~7与a~dp不对应,编驱动转换
入口参数:无
出口参数:无
************************************************************/
unsigned char code 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,0xbc}; //0x10无显示,0x11度,0x12双点,0x13_N
/*********************向CH451发送指令************************
名称:void CH451_Write(uint dat,uint length)
功能:向CH451发送指令
入口参数:uint dat 需要发送的指令
uint length 发送指令(dat)的长度
出口参数:无
************************************************************/
void CH451_Write(unsigned dat) //uint length
{
uint i;
LOAD=1; //串行数据加载端置1
for(i=12;i>0;i--)
{
DCLK=0; //串行数据时钟线 置0
if((dat&0x01)==0x01) //判断data最低位是否为1
DIN=1; // data最低位为1的话就向din(串行数据输入)写1
else DIN=0; // data最低位为0的话就向din(串行数据输入)写0
DCLK=1; //串行数据时钟线 置1
dat=dat>>1; //data向右移动一位
}
LOAD=0; //串行数据加载端置1
LOAD=1; //给load一个上升沿使data数据全部导入CH451
}
/***********************数码显示****************************
名称:void LED_Display(LED_Data1,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)
{
CH451_Write(CH451_DIG0|BCD[ LED_Data[7] ]);//第8位显示,LED_Data8位要显示的内容
CH451_Write(CH451_DIG1|BCD[ LED_Data[6] ]);//第7位显示
CH451_Write(CH451_DIG2|BCD[ LED_Data[5] ]);//第6位显示
CH451_Write(CH451_DIG3|BCD[ LED_Data[4] ]);//第5位显示
CH451_Write(CH451_DIG4|BCD[ LED_Data[3] ]);//第4位显示
CH451_Write(CH451_DIG5|BCD[ LED_Data[2] ]);//第3位显示
CH451_Write(CH451_DIG6|BCD[ LED_Data[1] ]);//第2位显示
CH451_Write(CH451_DIG7|BCD[ LED_Data[0] ]);//第1位显示
}
void LED_printc(uchar p,uchar LED_data)
{switch(p){
case 8:CH451_Write(CH451_DIG0|BCD[ LED_data ]);break;//第8位显示,LED_Data8位要显示的内容
case 7:CH451_Write(CH451_DIG1|BCD[ LED_data ]);break;//第7位显示
case 6:CH451_Write(CH451_DIG2|BCD[ LED_data ]);break;//第6位显示
case 5:CH451_Write(CH451_DIG3|BCD[ LED_data ]);break;//第5位显示
case 4:CH451_Write(CH451_DIG4|BCD[ LED_data ]);break;//第4位显示
case 3:CH451_Write(CH451_DIG5|BCD[ LED_data ]);break;//第3位显示
case 2:CH451_Write(CH451_DIG6|BCD[ LED_data ]);break;//第2位显示
case 1:CH451_Write(CH451_DIG7|BCD[ LED_data ]);break;//第1位显示
}
}
void LED_prints(unsigned char *led_string)
{
unsigned char i=0;
while(led_string[i]!=0x00)
{if(led_string[i]>='0'&&led_string[i]<='9')
LED_printc(i+1,led_string[i]-0x30);
else if(led_string[i]>='a'&&led_string[i]<='z')
LED_printc(i+1,led_string[i]-'a'+10);
i++;
}
}
/************************键盘传出准备**********************
文件名:void KeyStart()
功能:传送0111 到DIN
入口参数:无
出口参数:无
************************************************************/
void KeyStart()
{ uint i,dat=0x07;
LOAD=1; //串行数据加载端置1
for(i=4;i>0;i--)
{
DCLK=0; //串行数据时钟线 置0
if((dat&0x01)==0x01) //判断data最低位是否为1
DIN=1; // data最低位为1的话就向din(串行数据输入)写1
else DIN=0; // data最低位为0的话就向din(串行数据输入)写0
DCLK=1; //串行数据时钟线 置1
dat=dat>>1; //data向右移动一位
}
LOAD=0; //串行数据加载端置1
LOAD=1; //给load一个上升沿使data数据全部导入CH451
}
/************************对传出数据对应转换******************
文件名:CH451_ReadChange()
功能:转换输入7位到数字
入口参数:无
出口参数:无
************************************************************/
CH451_ReadChange(uint dat)
{ uint a;
switch(dat)
{
case 0x7f: a=0; break;//0键按下按键
case 0x7e: a=1; break;//1键按下按键
case 0x7d: a=2; break;//2键按下按键
case 0x7c: a=3; break;//3键按下按键
case 0x7b: a=4; break;//4键按下按键
case 0x7a: a=5; break;//5键按下按键
case 0x79: a=6; break;//6键按下按键
case 0x78: a=7; break;//7键按下按键
/*
case 0x3f: a=10; break;//0键释放按键
case 0x3e: a=11; break;//1键释放按键
case 0x3d: a=12; break;//2键释放按键
case 0x3c: a=13; break;//3键释放按键
case 0x3b: a=14; break;//4键释放按键
case 0x3a: a=15; break;//5键释放按键
case 0x39: a=16; break;//6键释放按键
case 0x38: a=17; break;//7键释放按键
*/
default: a=8; break;
}
return a;
}
/************************键盘传出CH451_Read()****************************
文件名:CH451_Read()
功能:传送输入7位
入口参数:按键
出口参数:键值00~07 10~17
************************************************************************/
CH451_scan()
{ uint i,dat=0;
KeyStart();
for(i=7;i>0;i--)
{ DCLK=1;
if(DOUT==1)
dat=dat|0x01;
DCLK=0;
dat=dat<<1;
}
dat=dat>>1;
DOUT=1;
dat=CH451_ReadChange(dat);
key=dat;
if(key!=8)
keyold=key;
return dat;
}
/*********************CH451初始化****************************
名称:void CH451_Init()
功能:CH451初始化,设置CH451选择4线串行接口
入口参数:无
出口参数:无
************************************************************/
void CH451_Init()
{
DIN=0; // 给DIN一个高电平 设置CH451选择4线串行接口
DIN=1;
DCLK=1;//置为默认的高电平
LOAD=1;
DOUT=1;//置为输入
CH451_Write(0x403); //设定系统参数,数码显示使能
CH451_Write(0x508); // 最末位为亮度调节
}
#endif
‘贰’ MP3的工作原理是什么
1.便携MP3播放器的俗称.
用来播放MP3格式音乐(现在可以兼容wma,wav等格式)的一种便携式的播放器.便携式MP3播放器最初由韩国人文光洙和黄鼎夏(Moon & Hwang)于1997年发明,并申请了相关专利.
MP3格式技术发展详解
2.MP3作为一种音乐格式
MPEG-1 Audio Layer 3,经常称为MP3,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。
MPEG-1 Audio Layer 3,经常称为MP3,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。
概观
MP3是一个数据压缩格式。它丢弃掉脉冲编码调制(PCM)音频数据中对人类听觉不重要的数据(类似于JPEG是一个有损图像压缩),从而达到了小得多的文件大小。
在MP3中使用了许多技术其中包括心理声学以确定音频的哪一部分可以丢弃。MP3音频可以按照不同的位速进行压缩,提供了在数据大小和声音质量之间进行权衡的一个范围。
MP3格式使用了混合的转换机制将时域信号转换成频域信号:
* 32波段多相积分滤波器(PQF)
* 36或者12 tap 改良离散余弦滤波器(MDCT);每个子波段大小可以在0...1和2...31之间独立选择
* 混叠衰减后处理
根据MPEG规范的说法,MPEG-4中的AAC(Advanced audio coding)将是MP3格式的下一代,尽管有许多创造和推广其他格式的重要努力。然而,由于MP3的空前的流行,任何其他格式的成功在目前来说都是不太可能的。MP3不仅有广泛的用户端软件支持,也有很多的硬件支持比如便携式媒体播放器(指MP3播放器)DVD和CD播放器。
发展
MPEG-1 Audio Layer 2编码开始时是德国Deutsche Forschungs- und Versuchsanstalt für Luft- und Raumfahrt(后来称为Deutsches Zentrum für Luft- und Raumfahrt, 德国太空中心)Egon Meier-Engelen管理的数字音频广播(DAB)项目。这个项目是欧盟作为EUREKA研究项目资助的,它的名字通常称为EU-147。EU-147 的研究期间是1987年到1994年。
到了1991年,就已经出现了两个提案:Musicam(称为Layer 2)和ASPEC(自适应频谱感知熵编码)。荷兰飞利浦公司、法国CCETT和德国Institut für Rundfunktechnik提出的Musicam方法由于它的简单、出错时的健壮性以及在高质量压缩时较少的计算量而被选中。基于子带编码的Musicam 格式是确定MPEG音频压缩格式(采样率、帧结构、数据头、每帧采样点)的一个关键因素。这项技术和它的设计思路完全融合到了ISO MPEG Audio Layer I、II 以及后来的Layer III(MP3)格式的定义中。在Mussmann教授(University of Hannover)的主持下,标准的制定由Leon van de Kerkhof(Layer I)和Gerhard Stoll(Layer II)完成。
一个由荷兰Leon Van de Kerkhof、德国Gerhard Stoll、法国Yves-François Dehery和德国Karlheinz Brandenburg 组成的工作小组吸收了Musicam和ASPEC的设计思想,并添加了他们自己的设计思想从而开发出了MP3,MP3能够在128kbit/s达到MP2 192kbit/s 音质。
所有这些算法最终都在1992年成为了MPEG的第一个标准组MPEG-1的一部分,并且生成了1993年公布的国际标准ISO/IEC 11172-3。MPEG音频上的更进一步的工作最终成为了1994年制定的第二个MPEG标准组MPEG-2标准的一部分,这个标准正式的称呼是1995年首次公布的ISO/IEC 13818-3。
编码器的压缩效率通常由位速定义,因为压缩率依赖于位数(:en:bit depth)和输入信号的采样率。然而,经常有产品使用CD参数(44.1kHz、两个通道、每通道16位或者称为2x16位)作为压缩率参考,使用这个参考的压缩率通常较高,这也说明了压缩率对于有损压缩存在的问题。
Karlheinz Brandenburg使用CD介质的Suzanne Vega的歌曲Tom’s Diner来评价MP3压缩算法。使用这首歌是因为这首歌的柔和、简单旋律使得在回放时更容易听到压缩格式中的缺陷。一些人开玩笑地将Suzanne Vega称为“MP3之母”。来自于EBU V3/SQAM参考CD的更多一些严肃和critical 音频选段(glockenspiel, triangle, accordion, ...)被专业音频工程师用来评价MPEG音频格式的主观感受质量。
MP3走向大众
为了生成位兼容的MPEG Audio文件(Layer 1、Layer 2、Layer 3),ISO MPEG Audio委员会成员用C语言开发的一个称为ISO 11172-5的参考模拟软件。在一些非实时操作系统上它能够演示第一款压缩音频基于DSP的实时硬件解码。一些其它的MPEG Audio实时开发出来用于面向消费接收机和机顶盒的数字广播(无线电DAB和电视DVB)。
后来,1994年7月7日Fraunhofer-Gesellschaft发布了第一个称为l3enc的MP3编码器。
Fraunhofer开发组在1995年7月14日选定扩展名.mp3(以前扩展名是.bit)。使用第一款实时软件MP3播放器Winplay3(1995年9月9日发布)许多人能够在自己的个人电脑上编码和回放MP3文件。由于当时的硬盘相对较小(如500MB),这项技术对于在计算机上存储娱乐音乐来说是至关重要的。
MP2、MP3与因特网
1993年10月,MP2(MPEG-1 Audio Layer 2)文件在因特网上出现,它们经常使用Xing MPEG Audio Player播放,后来又出现了Tobias Bading为Unix开发的MAPlay。MAPlay于199年2月22日首次发布,现在已经移植到微软视窗平台上。
刚开始仅有的MP2编码器产品是Xing Encoder和CDDA2WAV,CDDA2WAV是一个将CD音轨转换成WAV格式的CD抓取器。
Internet Underground Music Archive(IUMA)通常被认为是在线音乐革命的鼻祖,IUMA是因特网上第一个高保真音乐网站,在MP3和网络流行之前它有数千首授权的MP2录音。
从1995年上半年开始直到整个九十年代后期,MP3开始在因特网上蓬勃发展。MP3的流行主要得益于如Nullsoft于1997年发布的Winamp和Napster于1999年发布的Napster这样的公司和软件包的成功,并且它们相互促进发展。这些程序使得普通用户很容易地播放、制作、共享和收集MP3文件。
关于MP3文件的点对点技术文件共享的争论在最近几年迅速蔓延—这主要是由于压缩使得文件共享成为可能,未经压缩的文件过于庞大难于共享。由于MP3文件通过因特网大量传播一些主要唱片厂商通过法律起诉Napster来保护它们的版权(参见知识产权)。
如iTunes Music Store这样的商业在线音乐发行服务通常选择其它或者专有的支持数字版权管理(DRM)的音乐文件格式以控制和限制数字音乐的使用。支持DRM的格式的使用是为了防止受版权保护的素材免被侵犯版权,但是大多数的保护机制都能被一些方法破解。这些方法能够被计算机高手用来生成能够自由复制的解锁文件。一个显着的例外是微软公司的Windows Media Audio 10格式,目前它还没有被破解。如果希望得到一个压缩的音频文件,这个录制的音频流必须进行压缩并且带来音质的降低。
‘叁’ 固件是一种基于存储逻辑的硬件吗
固件具有软件功能的硬件。是一种把软件固化在硬件之中的器件。如微型计算机中,把高级语言的编译程序固化在只读存储器中,则此存储器就具有了编译程序的功能。这种存储器就属于固件。
“固件”简单的说,就是“操作系统”的意思,不过“固件”通常用来形容手机、电子书阅读器、平板、ps3游戏机等移动设备的操作系统;英文名称是firmware。
02
所以我们所说的帮手机刷机,其实就是帮手机重装系统,也就是帮手机重新安装固件;固件升级,其实就类似于电脑的操作系统升级,或者打补丁等;
03
正如前面所说的,固件不单单指手机的操作系统,还包括其他移动设备的操作系统,例如亚马逊的电子书阅读器kindle的操作系统,也可以被称为固件,具体还有哪些设备的操作系统也被称作固件,就要看人们的习惯了;
04
总的来说,固件,可以直接理解为操作系统。
‘肆’ MP3的工作原理是什么
1.便携MP3播放器的俗称.
用来播放MP3格式音乐(现在可以兼容wma,wav等格式)的一种便携式的播放器.便携式MP3播放器最初由韩国人文光洙和黄鼎夏(Moon & Hwang)于1997年发明,并申请了相关专利.
MP3格式技术发展详解
2.MP3作为一种音乐格式
MPEG-1 Audio Layer 3,经常称为MP3,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。
MPEG-1 Audio Layer 3,经常称为MP3,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户来说重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年由位于德国埃尔朗根的研究组织Fraunhofer-Gesellschaft的一组工程师发明和标准化的。
概观
MP3是一个数据压缩格式。它丢弃掉脉冲编码调制(PCM)音频数据中对人类听觉不重要的数据(类似于JPEG是一个有损图像压缩),从而达到了小得多的文件大小。
在MP3中使用了许多技术其中包括心理声学以确定音频的哪一部分可以丢弃。MP3音频可以按照不同的位速进行压缩,提供了在数据大小和声音质量之间进行权衡的一个范围。
MP3格式使用了混合的转换机制将时域信号转换成频域信号:
* 32波段多相积分滤波器(PQF)
* 36或者12 tap 改良离散余弦滤波器(MDCT);每个子波段大小可以在0...1和2...31之间独立选择
* 混叠衰减后处理
根据MPEG规范的说法,MPEG-4中的AAC(Advanced audio coding)将是MP3格式的下一代,尽管有许多创造和推广其他格式的重要努力。然而,由于MP3的空前的流行,任何其他格式的成功在目前来说都是不太可能的。MP3不仅有广泛的用户端软件支持,也有很多的硬件支持比如便携式媒体播放器(指MP3播放器)DVD和CD播放器。
发展
MPEG-1 Audio Layer 2编码开始时是德国Deutsche Forschungs- und Versuchsanstalt für Luft- und Raumfahrt(后来称为Deutsches Zentrum für Luft- und Raumfahrt, 德国太空中心)Egon Meier-Engelen管理的数字音频广播(DAB)项目。这个项目是欧盟作为EUREKA研究项目资助的,它的名字通常称为EU-147。EU-147 的研究期间是1987年到1994年。
到了1991年,就已经出现了两个提案:Musicam(称为Layer 2)和ASPEC(自适应频谱感知熵编码)。荷兰飞利浦公司、法国CCETT和德国Institut für Rundfunktechnik提出的Musicam方法由于它的简单、出错时的健壮性以及在高质量压缩时较少的计算量而被选中。基于子带编码的Musicam 格式是确定MPEG音频压缩格式(采样率、帧结构、数据头、每帧采样点)的一个关键因素。这项技术和它的设计思路完全融合到了ISO MPEG Audio Layer I、II 以及后来的Layer III(MP3)格式的定义中。在Mussmann教授(University of Hannover)的主持下,标准的制定由Leon van de Kerkhof(Layer I)和Gerhard Stoll(Layer II)完成。
一个由荷兰Leon Van de Kerkhof、德国Gerhard Stoll、法国Yves-François Dehery和德国Karlheinz Brandenburg 组成的工作小组吸收了Musicam和ASPEC的设计思想,并添加了他们自己的设计思想从而开发出了MP3,MP3能够在128kbit/s达到MP2 192kbit/s 音质。
所有这些算法最终都在1992年成为了MPEG的第一个标准组MPEG-1的一部分,并且生成了1993年公布的国际标准ISO/IEC 11172-3。MPEG音频上的更进一步的工作最终成为了1994年制定的第二个MPEG标准组MPEG-2标准的一部分,这个标准正式的称呼是1995年首次公布的ISO/IEC 13818-3。
编码器的压缩效率通常由位速定义,因为压缩率依赖于位数(:en:bit depth)和输入信号的采样率。然而,经常有产品使用CD参数(44.1kHz、两个通道、每通道16位或者称为2x16位)作为压缩率参考,使用这个参考的压缩率通常较高,这也说明了压缩率对于有损压缩存在的问题。
Karlheinz Brandenburg使用CD介质的Suzanne Vega的歌曲Tom’s Diner来评价MP3压缩算法。使用这首歌是因为这首歌的柔和、简单旋律使得在回放时更容易听到压缩格式中的缺陷。一些人开玩笑地将Suzanne Vega称为“MP3之母”。来自于EBU V3/SQAM参考CD的更多一些严肃和critical 音频选段(glockenspiel, triangle, accordion, ...)被专业音频工程师用来评价MPEG音频格式的主观感受质量。
MP3走向大众
为了生成位兼容的MPEG Audio文件(Layer 1、Layer 2、Layer 3),ISO MPEG Audio委员会成员用C语言开发的一个称为ISO 11172-5的参考模拟软件。在一些非实时操作系统上它能够演示第一款压缩音频基于DSP的实时硬件解码。一些其它的MPEG Audio实时开发出来用于面向消费接收机和机顶盒的数字广播(无线电DAB和电视DVB)。
后来,1994年7月7日Fraunhofer-Gesellschaft发布了第一个称为l3enc的MP3编码器。
Fraunhofer开发组在1995年7月14日选定扩展名.mp3(以前扩展名是.bit)。使用第一款实时软件MP3播放器Winplay3(1995年9月9日发布)许多人能够在自己的个人电脑上编码和回放MP3文件。由于当时的硬盘相对较小(如500MB),这项技术对于在计算机上存储娱乐音乐来说是至关重要的。
MP2、MP3与因特网
1993年10月,MP2(MPEG-1 Audio Layer 2)文件在因特网上出现,它们经常使用Xing MPEG Audio Player播放,后来又出现了Tobias Bading为Unix开发的MAPlay。MAPlay于199年2月22日首次发布,现在已经移植到微软视窗平台上。
刚开始仅有的MP2编码器产品是Xing Encoder和CDDA2WAV,CDDA2WAV是一个将CD音轨转换成WAV格式的CD抓取器。
Internet Underground Music Archive(IUMA)通常被认为是在线音乐革命的鼻祖,IUMA是因特网上第一个高保真音乐网站,在MP3和网络流行之前它有数千首授权的MP2录音。
从1995年上半年开始直到整个九十年代后期,MP3开始在因特网上蓬勃发展。MP3的流行主要得益于如Nullsoft于1997年发布的Winamp和Napster于1999年发布的Napster这样的公司和软件包的成功,并且它们相互促进发展。这些程序使得普通用户很容易地播放、制作、共享和收集MP3文件。
关于MP3文件的点对点技术文件共享的争论在最近几年迅速蔓延—这主要是由于压缩使得文件共享成为可能,未经压缩的文件过于庞大难于共享。由于MP3文件通过因特网大量传播一些主要唱片厂商通过法律起诉Napster来保护它们的版权(参见知识产权)。
如iTunes Music Store这样的商业在线音乐发行服务通常选择其它或者专有的支持数字版权管理(DRM)的音乐文件格式以控制和限制数字音乐的使用。支持DRM的格式的使用是为了防止受版权保护的素材免被侵犯版权,但是大多数的保护机制都能被一些方法破解。这些方法能够被计算机高手用来生成能够自由复制的解锁文件。一个显着的例外是微软公司的Windows Media Audio 10格式,目前它还没有被破解。如果希望得到一个压缩的音频文件,这个录制的音频流必须进行压缩并且带来音质的降低。
‘伍’ CH451中 不译码指的是什么还有数据加协、1线串行接口、4线串行接口。求解释
不译码指的是不转成BCD码,也就是说如果连接是按顺序连接数码管的八个管脚,在对CH451初始化后,可发送设置,让它用译码方式,(默认不译码),译码后,有个表,发送数据是多少显多少。不译码,需要在程序中写个表,手工译码,也就是数码管的a、b、c...对应的灯亮,总体显一个数。
4线串行接口,是和单片机的通信采用串行通信,其中一次传输4个数据,通过CLOCK管教控制,具体请看CH451手册
下面是一段CH451用汇编编写的驱动程序,望对理解有帮助
;****************************************************************************
;需要主程序定义的参数
CH451_DCLK BIT P3.4 ;串行数据时钟,上升沿激活
CH451_DIN BIT P3.3 ;串行数据输出,接 CH451 的数据输入
CH451_LOAD BIT P2.3 ;串行命令加载,上升沿激活
CH451_DOUT BIT P2.2 ;INT0,键盘中断和键值数据输入,接 CH451 的数据输出
CH451_KEY DATA 7FH ;存放键盘中断中读取的键值
;****************************************************************************
; R452 367 1
ORG 0000H
START:
ACALL CH451_INIT ;调用初始化程序
MOV R5,#10H ;将要显示的数放入R5中
MOV R4,#04H ;将要在第几位上显示放在R4中,最右边是0位
KEYSHOW:
ACALL SCAN1
ACALL CHANGE
SJMP KEYSHOW
SJMP $
;****************************************************************************
;子程序调用
;****************************************************************************
; 初始化子程序
CH451_INIT:
CLR CH451_DIN ;先低后高,输出上升沿通知 CH451 选择 4 线串行接口
SETB CH451_DCLK ;置为默认的高电平
SETB CH451_DIN
SETB CH451_LOAD
SETB CH451_DOUT ;置为输入
CLR IT0 ;置外部信号为低电平触发
SETB PX0 ;置高优先级或者低优先级
CLR IE0 ;清中断标志
SETB EX0 ;允许键盘中断
MOV B,#04H ;设置为键盘与显示开
MOV A,#03H
ACALL CH451_WRITE
RET
;****************************************************************************
;数码管显示程序
;****************************************************************************
;转换程序,在R4位显示R5值
CHANGE:
MOV A,R5
ACALL TTA ;对应M2t1板的数码管转换
MOV R2,A
MOV A,R4
ACALL TTB ;对应m2t1板的数码管位置转换
MOV B,A
MOV A,R2
ACALL CH451_WRITE
RET
;M2T1板数码管对应表
TTA: MOV DPTR,#TAB_A
MOVC A,@A+DPTR
RET
;对应m2t1板的数码管位置转换
TTB: MOV DPTR,#TAB_B
MOVC A,@A+DPTR
RET
TAB_A:
DB 0BEH;0 显示数
DB 24H ;1
DB 0EAH;2
DB 0E6H;3
DB 74H ;4
DB 0D6H;5
DB 0DEH;6
DB 0A4H;7
DB 0FEH;8
DB 0F6H;9
DB 0FCH;A
DB 5EH ;B
DB 4AH ;C
DB 0BEH;D
DB 0DAH;E
DB 0E4H;F
DB 00H ;10H无显示
DB 0FEH;11H对于数码管0位倒过来焊接的人,可以显示°C
DB 40H ;12H - 号
TAB_B:
DB 0AH;0 显示数码管号
DB 09H;1
DB 0BH;2
DB 08H;3
DB 0CH;4
DB 0DH;5
DB 0EH;6
DB 0FH;7
;****************************************************************************
;键盘扫描程序
;****************************************************************************
SCAN1:MOV C,CH451_DOUT
JC SCAN1
ACALL CH451_READ
MOV R1,A
C0: CJNE A,#40H,C1
MOV R5,#00H
AJMP TES
C1: CJNE A,#43H,C2
MOV R5,#01H
AJMP TES
C2: CJNE A,#41H,C3
MOV R5,#02H
AJMP TES
C3: CJNE A,#42H,C4
MOV R5,#03H
AJMP TES
C4: CJNE A,#48H,C5
MOV R5,#04H
AJMP TES
C5: CJNE A,#4BH,C6
MOV R5,#05H
AJMP TES
C6: CJNE A,#49H,C7
MOV R5,#06H
AJMP TES
C7: CJNE A,#4AH,SCAN1
MOV R5,#07H
AJMP TES
TES:
RET
;****************************************************************************
;移位程序
;****************************************************************************
;DELAY_1S 延迟1秒
DELAY_1S:
MOV R7,#20
DEL1:MOV R6,#200
DEL2:MOV R3,#248
DJNZ R3,$
DJNZ R6,DEL2
DJNZ R7,DEL1
RET
;左四位左移位
/*LIFT:
MOV B,#03H
MOV A,#00H
ACALL CH451_WRITE
INC R5
ACALL CHANGE
ACALL DELAY_1S
CJNE R5,#09H,LIFT
SJMP START
RET*/
;****************************************************************************
;串口通信读出写入程序
;****************************************************************************
CH451_WRITE:
CLR EX0 ;禁止键盘中断
CLR CH451_LOAD ;命令开始,此命令可以放在后面
MOV R7,#08H ;将 ACC 中 8 位送出
CH451_WRITE_8: RRC A ;低位在前,高位在后
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿通知 CH451 输入位数据
DJNZ R7,CH451_WRITE_8 ;位数据未完继续
MOV A,B
MOV R7,#04H ;将 B 中 4 位送出
CH451_WRITE_4: RRC A ;低位在前,高位在后
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿通知 CH451 输入位数据
DJNZ R7,CH451_WRITE_4 ;位数据未完继续
SETB CH451_LOAD ;产生加载上升沿通知 CH451 处理命令数据
SETB EX0 ;允许键盘中断
RET
; 输入键值子程序
CH451_READ: CLR EX0 ;禁止键盘中断
CLR CH451_LOAD ;命令开始
MOV A,#07H ;读取键值命令的高 4 位 0111B
MOV R7,#04H ;忽略 12 位命令的低 8 位
CH451_READ_4: RRC A ;低位在前,高位在后
CLR CH451_DCLK
MOV CH451_DIN,C ;送出一位数据
SETB CH451_DCLK ;产生时钟上升沿锁通知 CH451 输入位数据
DJNZ R7,CH451_READ_4 ;位数据未完继续
SETB CH451_LOAD ;产生加载上升沿通知 CH451 处理命令数据
CLR A ;先清除键值单元以便移位
MOV R7,#07H ;读入 7 位键值
CH451_READ_7:
MOV C,CH451_DOUT ;读入一位数据
CLR CH451_DCLK ;产生时钟下升沿通知 CH451 输出下一位
RLC A ;数据移入 ACC,高位在前,低位在后
SETB CH451_DCLK
DJNZ R7,CH451_READ_7 ;位数据未完继续
CLR IE0 ;清中断标志,读操作过程中有低电平脉冲
SETB EX0 ;允许键盘中断
RET
END