#define data_point P0
sbit EOC=P2^0
sbit ADDA=P2^1
sbit ADDB=P2^2
sbit ADDC=P2^3
sbit OE=P2^5
sbit START=P2^6
sbit CLK=P2^7
sbit ALE=P2^6
unsigned char disp[3]={0,0,0}
char code dispcode[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}
unsigned char t0count=0
unsigned int temp
double sum
unsigned char val_Integer //整数
unsigned int val_Decimal //小数
sbit k1 = P1^0
sbit k2 = P1^1
sbit k3 = P1^2
sbit k4 = P1^3
void delay(unsigned char ms)
{
unsigned char i
while(ms--)
for(i=0i<125i++)
}
void display()
{
disp[0]=disp[0]&0x7f
P3= disp[0]
k1 = 1
delay(2)
k1 = 0
P3= disp[1]
k2 = 1
delay(2)
k2 = 0
P3= disp[2]
k3 = 1
delay(2)
k3 = 0
P3= disp[3]
k4 = 1
delay(2)
k4 = 0
}
unsigned char ADC0808()
{
unsigned char d
ADDC=0
ADDB=0
ADDA=0
TR1=1
ALE=1ALE=0
START=1START=0
while(EOC==0)
OE=1
d=data_point
OE=0
TR1=1
return d
}
void covert(unsigned char x)
{
sum=x*0.0201378
val_Integer=(unsigned char)sum
val_Decimal=(unsigned int)((sum-val_Integer)*1000)
disp[3]=dispcode[val_Decimal%10]
disp[2]=dispcode[val_Decimal/10%10]
disp[1]=dispcode[val_Decimal/100]
disp[0]=dispcode[val_Integer]
}
void main()
{
TMOD=0x21
TH0=(65536-10000)/256
TL0=(65536-10000)%256
TH1=256-2
ET0=1
ET1=1
EA=1
TR0=1
OE=0
START=0
EOC=1
while(1)
{
display()
}
}
void time0() interrupt 1
{
TH0=(65536-10000)/256
TL0=(65536-10000)%256
t0count++
if(t0count==100)
{
t0count=0
covert(ADC0808())
}
}
void time1() interrupt 3
{
CLK=~CLK
}
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条)