#include "main.h"
void ADC_init(void)
void del(INT8U x)
void uart_init(void)
void PutHex(INT8U *cp,INT8U len)
void ADC_SPI_Routine(void)
void Putstr(char *cs)
/*用悄历的是5406,12M晶体,波特率不能太大,用2400,
实验过程是 在P1.6脚 接2.5v电压,开AD 读到最终值是80H,7FH 左右*/
void main()
{
EA=0
P1M0=0x40
P1M1=0x00//表示第P1.6作为AD输入
EA=1
uart_init()
ADC_init()
while(1){
del(100)
uart_s_buf[0] = ADC_DATA
uart_s_buf[1]=0x23
PutHex(uart_s_buf,2)
del(1000)
}
}
void ADC_init(void)
{
ADC_CONTR |= 0x06
ADC_CONTR |= 0x80//开启ADC电源
del(1)
ADC_CONTR |= 0x08//启动AD
AUXR |= 0x10
EADC_SPI = 1
}
void del(INT8U yj)
{
INT8U yj2=5000
while(yj!=0)
{
while(yj2!=0)
{
yj2--
}
yj2=1000
yj--
}
}
void uart_init(void)
{
SCON = 0x50
//SCON: mode 1,8-bit UART, enable rcvr
AUXR = 0x80 // 作在1T模式
// PCON = 0x80 // 加速
TMOD = 0x20 //* TMOD: timer 1,mode 2,8-bit reload TL0 NO USED
TH1 = SYS_TDATA /* 2400 Bds at 11.1184MHz */
TL1 = SYS_TDATA /* 2400 Bds at 11.1184MHz */
// ES = 1 /* Enable serial interrupt*/
TR1 = 1
/* Timer 1 run */
}
void PutHex(INT8U *cp,INT8U len)
{
ES=0
TI= 0
while(len--)
{
SBUF=*cp
cp++
while(TI==0) //等待发送结束,死循环,如果TI==0,则死循环,如果TI==1,则执行下条。 同while(TI==0){}
TI=0
}
ES=0
}
void Putstr(char *cs)
{
TI=0
while(*cs) /* 例如 :指向数组的指针,例如
int b[10]
int *a = b
a就是b[0]的地址*a就是b[0]的内容
a+1就是b[1]的地址依此类推
又如char *a = "hank"
那么通过a就能得到整个字符串"hank"
*a是h
*(a+1)是a 所以发送完k后 就是(*cs==0)0了,那启余搜就跳毁没出循环 */
{
SBUF=*cs
cs++
while(TI==0)
TI=0
}
}
void ADC_SPI_Routine(void) interrupt 5
{
EADC_SPI = 0
ADC_CONTR |= 0x08 //ADC_START启动
ADC_CONTR &= 0xef //ADC_FLAG清零
EADC_SPI = 1
}
简单点,建立32位变伍稿灶量A,每采样一次就加到A,采样完8次再除以8就好了,u16 ADC_ZKB(u8 Channel)
{
u32 value1=0
u16 value
u8 i
for(i=0i<8i++)
{
ADC_CSR = Channel &0x0F // 选择AD转换通道
ADC_CR1 |= 0x01 // 启动AD转换
while(!(ADC_CSR &0x80))// 等待AD转换完成
value = ADC_DRL
value |=((ADC_DRH<<8)&0X0300)
value1+=value
ADC_CSR = 0x00
}
return (value1/8)
}
大概这意思,怎敬雹么定义32位数,这个自己去查,因为AD采样时间比较久,估计这样FOR可能不合适,腔扮自己可以改改。
AD0809的采集程序//---A/D转换---
//-----头文件引用------
#include <Reg51.h>
#include <absacc.h>
#include <intrins.h>
typedef unsigned char BYTE/*自定义字节类型*/
#define Set_Bit(BIT) (BIT = 1) /*定义置1函数*/
#define Clear_Bit(BIT) (BIT = 0) /*定义清0函数*/
/************************************************************************************/
void Write_Hd7279(BYTE,BYTE)/*定义HD7279写函数*/
BYTE Read_Hd7279(BYTE)/*定义HD7279读函数*/
void Send_Byte(BYTE)/*定义HD7279发送字节函数*/
BYTE Receive_Byte(void)/清冲*定义HD7279接收字节函数*/
void Short_Delay(void)/*定义短延时函数*/
void Long_Delay(void)/*定义长延时函数*/
void Mcu_Init(void)/*定义MCU初始化函数*/
void Delay_200_mS(void)/*定义200ms延时函数*/
sbit Hd7279_Clk=P1^6/*定义HD7279时钟硬件连接*/
sbit Hd7279_Data=P1^5/*定义HD7279数据硬件连接携则*/
sbit cs=P1^7
void Short_Delay(void) /*短延时函数*/
{
BYTE i
for(i=0i<0x08i++)
}
/************************************************************************************/辩正棚
void Long_Delay(void) /*长延时函数*/
{
BYTE i
for(i=0i<0x30i++)
}
/************************************************************************************/
void Write_Hd7279(BYTE Command,BYTE Data) /*HD7279写函数*/
{
Send_Byte(Command)
Send_Byte(Data)
}
/************************************************************************************/
void Send_Byte(BYTE Data_Out) /*HD7279发送字节函数*/
{
BYTE i
cs=0
Long_Delay()
for(i=0i<8i++)
{
if(Data_Out&0x80) Set_Bit(Hd7279_Data)
else Clear_Bit(Hd7279_Data)
Set_Bit(Hd7279_Clk)
Short_Delay()
Clear_Bit(Hd7279_Clk)
Short_Delay()
Data_Out=Data_Out<<1
}
Clear_Bit(Hd7279_Data)
}
//-----宏声明-----
#define A_DPORT XBYTE[0xFef3]//0809通道0地址
#define uchar unsigned char
//-----变量定义-----
bit bdata bz=0//定义标志
uchar val
//-----初始化-----
void first(void)
{
P1=0xff
P2=0xff
P3=0xff
P0=0xff
Send_Byte(0xa4)
IT1=1
EX1=1
EA=1//INT0 允许
}
//-----中断-----
void int_0(void) interrupt 2
{
val=A_DPORT//读 A_D 数据
bz=1//置读数标志
}
//-----主程序-----
main()
{
first()//初始化
while(1)
{
A_DPORT=val//启动 A_D
while(bz==0)//等待 A_D 转换结束
// val=~A_DPORT
//P1=val//数据输出
Write_Hd7279(0xc8,val&0x0f)
Write_Hd7279(0xc9,val>>4)
Write_Hd7279(0x92,0x00)
Write_Hd7279(0x93,0x00)
Write_Hd7279(0x94,0x00)
Write_Hd7279(0x95,0x00)
Write_Hd7279(0xce,0x0d)
Write_Hd7279(0xcf,0x0a)
bz=0//清读数标志
}
}
这就是C的程序
http://hi.baidu.com/dzkfw/blog/item/4a188216fd986b12c83d6d05.html
不平凡的单片机学习资料,很好的单片机教程,超好用,一个不占内存的教程,有案例。
1、最新版单片机编程宝典下载地址,学习单片机编程必备手册
2、单片机c语言运用例子
3、十天学会单片机c语言和单片机制作,最好的单片机资料
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)