📄 s3c44b0xadconverterapplication.txt
字号:
#include “s3c44b0.h” //头文件
#define MAX_VALUE 0x3FF //数字量最大值
#define MIN_VALUE 0x0//数字量最小值
init _interrupt_handler((unsigned int)IsrIRQ);//中断初始化声明
install_isr_handler(HandlerTIMER0, (void *)timer0_isr);
void timer0-isr(void)//中断处理程序声明
test_adc();
char display_buffer[6];//数码管现实缓冲区
int refresh_index=0;
unsigned char seg7table[16]={0xc0,0cf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e} //定义0-f
void main (void)
{ rTCFG0=0x0;
rTCNTB0=0x2000;
rTCON=0x00000009;//T0自动重载&开始
rINTCON=0x7;// 屏蔽 IRQ,FIQ
init _interrupt_handler((unsigned int)IsrIRQ);
install_isr_handler(HandlerTIMER0, (void *)timer0_isr);//时钟初始化
iINTMOD=0x0;//设置中断为IRQ模式
rINTMSK=0x07FFFFFF&(BIT_GLOBAL|BIT_TIMER0);
rINTCON=0x5;
test_adc();//采集数据
}
void test _ adc (void)
{ int loop_delay; //延迟变量
int data; //存放采集数据的变量
int get_index; //采集次数变量
int buffer[4]; //存放最终的转换数据
rCLKCON=0x7FF8;//时钟初始化
while(1){
rADCPSR=0x14; //设置ADCPSR的值
data=0;
for(get_index=0;get_index<16;get_index++)
{ rADCCON=0x1|(0x0<<2); //设置AIN0
while(rADCCON&0x1); //为避免第一个标志位有错
while(!(rADCCON&0x40); //检测ADC是否转换结束
data+=rADCDAT; //读入转换值
for(loop_delay=1000;loop_delay;loop_delay--); //延迟
}
data/= (get_index-1); //取平均值
value=trans_input(data);//数字量转模拟量
buffer[0]=value/10;
buffer[1]=value%10;
data=0;
for(get_index=0;get_index<16;get_index++)
{ rADCCON=0x1|(0x1<<2); // 设置AIN1
while(rADCCON&0x1); //为避免第一个标志位有错
while(!(rADCCON&0x40); //检测ADC是否转换结束
data+=rADCDAT; //读入转换值
for(loop_delay=1000;loop_delay;loop_delay--);//延迟
}
data/= (get_index-1); //取平均值
value=trans_input(data);
buffer[2]=value/10;
buffer[3]=value%10;
for(loop_delay=1000;loop_delay;loop_delay--); //延迟
}
char trans_input (int value)
{if (value==MAX_value) return 50; //模拟信号范围0~50
return (char)(value*50/MAX_VALUE-MINVALUE);}
void timer0-isr(void){//中断处理程序
rI_ISPC=BIT_TIMER0;
if (refresh_index==2) refresh_index++;
if(refresh_index==5) refresh_index=0;
//设置数码管段选
*((unsigned char *) 0x0200006)=0x3f&(0x01<<refresh_index);
*((unsigned char *)0x0200004)=seg7table[display_buffer[refresh_index]]
Refresh_index++; }
void init_interrupt_handle(unsigned int irq_handle)
{
int i;
rINTPND=0x0; //清除所有的未决的中断
rI_ISPC=0x3FFFFFF;//每位置1,清除中断挂起条件
for(i=0;i<256;i+4) //清除中断表
{*(unsigned int*)(_ISR_STARTADDRESS+i)=0;}
*(unsigned int*)(HandleIRQ)=irq_handle;}
void install_isr_handle(int irq_no,void* irq_routine)
{ *(unsigned int *)(irq_no)=(unsigned int)irq_routine;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -