PIC18F4520单片机AD转换程序与注释
来源:互联网 发布:软件开发 等级 编辑:程序博客网 时间:2024/05/01 03:19
该头文件位于D:\Program Files\Microchip\mplabc18\v3.40\h下,这下面是不同型号的单片机
的头文件定义,使用时把相应的头文件包含进来就可以了
*/
#include<p18f4520.h>
const unsigned char seg[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//共阴型数据管0-9的字段码,共阳的我没有写,用到时可以再改
/**************************************************************
功能:延时函数
参数:unsigned 16位数,取值范围0-65535
*/
void delay(unsigned dly)
{
unsigned char temp=200;
for(;temp>0;temp--)
for(;dly>0;dly--);
}
/*************************************************************
功能:片上AD转换器初始化设置函数
参数:无
说明:设置使用通道0进行AD转换,转换后的数据采用右对齐的格式
ADCON1与ADCON2的设置的意义可参看芯片说明书
*/
void init_ad()
{
// TRISA=0X07;//这个可以注释掉,没有用
ADCON1=0X0C;
ADCON2=0X94;
ADCON0bits.ADON=1;
// ADCON0bits.CHS0=0;//可通过位设置来选择AD转换通道
// ADCON0bits.CHS1=0;
// ADCON0bits.CHS2=0;
ADCON0bits.CHS=1;//也可以使用CHS来设置AD转换的通道,当然也可以同进进行多路AD转化
//只需要简单地修改get_result函数即可。
}
/*************************************************************
功能:获取AD转换结果函数
参数:返回16位转换结果数据--只有低10位是有效的转换数据
*/
unsigned int get_result()
{
unsigned int dat=0;
ADCON0bits.GO_DONE=1;
while(ADCON0bits.GO_DONE);
PIR1bits.ADIF=0;
dat=ADRESH;
dat=dat<<8;
dat =dat+ADRESL;
return dat;
}
/*************************************************************
功能:数码管显示函数
参数:无符号型char
说明:参数为i*5/1024 *10,显示时程序自动在第一个数码管后加了个小数点,所以传入的参数
会乘以10,如些做是为了方便显示数据
*/
void disp_num(unsigned char tmp)
{
unsigned char i=0;
/*如果在实物电路板中使用时,当发生数据码显示亮度不合适时,可以修改for循环中的i<**,
增大或减小**;或者修改for循环过程中调用的delay函数的参数,调整延时时间
*/
for(i=0;i<30;i++)
{
PORTCbits.RC0=0;
PORTD=seg[tmp%10];
delay(100);
PORTCbits.RC0=1;
PORTCbits.RC1=0;
PORTD=seg[tmp/10]|0x80;
delay(100);
PORTCbits.RC1=1;
}
}
/*******************************************************************
功能:数码管引脚初始化函数
参数:无
说明:仿真中使用的数码管为共阴型,使用单片机的D口作为段码,使用C口的0,1位作为位选码
*/
void init_num()
{
TRISD=0x00;
TRISCbits.TRISC0=0;
TRISCbits.TRISC1=0;
PORTCbits.RC0=1;
PORTCbits.RC1=1;
}
/*main函数*/
int main()
{
unsigned int tmp=0;
unsigned char i=0;
init_num();
init_ad();
while(1)
{
tmp=get_result();
disp_num(tmp*50/1024);
/*
关于上面disp_num函数的参数的说明:
可定义一个1024个元素的数组,然后把i*50/1024取整后对号放到这
个数组中,然后通过查表来得到欲显示的数据,这样可以减少单片机的运算时间,
同时显示误差更小,但是会增大存储空间的开销。
当然也可以增加数据管的位数,比如使用4个数码管来显示,但程序需要小做修改。
*/
}
return 0;
}
- PIC18F4520单片机AD转换程序与注释
- 单片机AD转换程序 TLC2543
- stc单片机ad转换程序心得
- 51单片机AD转换的程序
- PIC18F4520的ADC与LCD1602显示程序
- 单片机ad采样转换
- 51单片机 AD转换
- 单片机AD-DA转换
- 单片机ad/da转换
- PIC单片机-AD转换
- 单片机AD转换
- PIC单片机之AD转换
- 单片机(STC12C2052AD)AD转换功能C语言程序(成功)+教训体会--注意关系运算优先级啊
- 51单片机STC89C52 AD模数转换
- 51单片机AD转换之PCF8591
- 单片机笔记AD转换之PCF8591
- 51单片机的AD/DA转换
- PIC16F877A PICC AD转换程序
- 关于ARM7软中断的那个小事 2011年11月25日
- ADS中防止全局变量被优化
- 字符型驱动1 注册加载与卸载,读写与控制IOCTL的使用
- 1 red hat linux 9下建立C开发环境
- 2多线程的阻塞、唤醒与同步
- PIC18F4520单片机AD转换程序与注释
- PIC18F4520的ADC与LCD1602显示程序
- 我常用的Linux指令
- ARM的step内存到SDRAM内存代码复制程序调试之罪魁祸首 ADR与LDR
- uboot-2012-4.1移植 (一)分析uboot
- uboot-2012-4.1移植 (2)修改uboot代码
- 移植Linux-3.4.2到开发板gq2440
- 移植Linux-2.6.22到GQ2440上
- LCD驱动设计与分析 --GQ2440+LTV350QV_F04 + LINUX2.6.22内核