平时无按键动作时候,列线处于高电平状态,当有键按下时,列线电平状态将由通过此按键的行线电平决定:行线电平如果为低,列线电平为低;行线电平为高,列线电平也是高。通过这样的方式来识别矩阵式键盘是否被按下。
开关0~7分别控制LED0,LED1,LED2,LED3,LED4,LED5,LED6,LED7的灭,然后开关8~F就控制它们的亮。同时进行控制采样。
(2)用AD转换器实现LPC2138的A/D转换
AD转换就是模数转换,顾名思义,就是把模拟信号转换成数字信号。
如果采样对象是动态的持续信号,则系统可按一个预定的频率对其进行连续采样,只要采样频率高于信号上限频率的2倍,就可以将该模拟信号包含的信息完全采集到。(奈奎斯特采样定律)。
如果采样对象是一个低频信号时,采样频率就可以设置的比较低,即采样周期比系统节拍周期长的多,将采样周期设置为系统节拍周期的整数倍,就可以用系统提供的延时函数来控制采样周期。这样的采样任务可以单独完成而不需要ISR配合。
但当采样周期与系统节拍在同一个数量级时候,如果仍然用延时函数来控制的话,就会产生时间抖动,会影响采样的质量,这时候本设计用定时中断来产生稳定的采样周期。
系统也可以使用节拍钩子函数来进行采样,本设计这里不需要节拍钩子函数来控制采样,但是节拍钩子函数具有ISR的性质,同时采样非常稳定。节拍周期越短,时间管理就会越精细,同时占得资源也会相对来说更多一些。
现实中采样任务往往是等待采样对象出现才采样,所以是被动采样。在被动采样中,启动采样的时刻是随即的,故没有采样周期的概念。
在实际能谱仪中,能谱分辨率多达1024道,脉冲之间的间隔变化较大,短时是微秒级。所以A/D转换一定是在中断中完成,而不是像仿真那样放在任务中就可以完成了。
在这里本设计我们使用的ADC是3位并联比较型ADC电路,它是由一个电压比较器,一个寄存器和一个编码器组成的。输入为0~UREF间的模拟电压UL,输出为3位二进制代码d2d1d0。电压比较器采取四舍五入的方法划分量化电平。
电压比较器的输出状态由D触发器构成的寄存器进行储存,并由优先代码编译器转换为3位二进制数,从而实现了模拟量到数字量的转换。如图3.6所示:
图3.6 A/D转换流程图
代码如下
void TaskADC (void *pdata)
{
extern uint8 *title2[11];
uint32 ADC_Data;
uint8 i=0;
char str [14] ;
pdata=pdata;
TargetInit ();
PINSEL1=PINSEL1|0X00400000;
AD0CR=(1<<0) |
((Fpclk/1000000-1) << 8)|
( 0<<16)|
( 0<<17)|
( 0<<21)|
( 0<<22)|
( 0<<24)|
( 0<<27);
while (1)
{
for(i=0;i<=10;i++)
GUI_PutHZ(20+18*i,20,(uint8 *)title2[i],16,16) ;
GUI_PutString(20,50,"Measure the AD Value:");
ADC_Data=AD0DR;
AD0CR=(AD0CR&0x00FFFF00)|0x01| (1<<24) ; //设置通道1 基于uCOS-II的多功能数据采集系统的开发+源代码+流程图(9):http://www.youerw.com/zidonghua/lunwen_771.html