另一方面,C语言作为一种比较接近低层的语言,在不同的系统上都会做一些与硬件有关的扩展,这一部分,可以查系统附带的帮助手册,再结合系统的一些例子程序,动手做一下。51系统有个好处就是它的汇编比较简单,写完程序看看生成的汇编代码就基本上可以确定效果。
国内8051还是Keil用的多,IAR确实用的少,资料也少。用IAR的好处是它支持的CPU种类很多,写好的C代码比较方便在多种CPU之间移植。当然,这个方便也是相对的,实际上很有限。所以,如果你的程序不会在多种CPU上进行移植,还是用Keil吧,就8051来说,还是Keil比较专业。
嘉定单片机是STC89C52RC这款常用51单片机,推荐用两个74HC573,输入全接P0;输出接16个LED负极(573有一定驱动能力,实际应用可以接LED正极,但是习惯上仍采用灌电流的驱动方式)然后LED另一极接正极,设573的所存分别用P3.7和P3.6控制,程序如下:#include<reg52.h>sbit suocun1=P3^7
sbit suocun2=P3^6
void delay(int z){
int x,y
for(x=zx>0x--)
for(y=110y>0y--)
}
void main(){
char a
while(1)
{
suocun1=1
suocun2=0
for(a=0a<8a++)
{
P0=0x01<<1
delay(50)
}
suocun2=1
suocun1=0
for(a=0a<8a++)
{
P0=0x01<<1
delay(50)
}
}
}
我在KEIL4上编译0错误0警告
573的接法可以百度 datasheet 很简单的
启动ADC0809,ADC0809将开始将外部电压转换成数字,当转换完成时,转换完成信号引脚会输出一个电平(请查看datasheet).这时单片机就可以直接读取数据了.如果要不停采集,就继续启动采集,再查询ADC0809完成引脚.
ADC0809芯片的采集速度是几百K吧.记不得了,你自己看下.
也可以将ADC0809的完成引脚接到单片机的外部中断引脚上,这样就可以在中断中读取.
代码自己找下吧,网上很多的.
这个给你参考:
#define
voldata
P2
sbit
adra=P0^0
sbit
adrb=P0^1
sbit
adrc=P0^2
sbit
ale=P0^3
sbit
st=P0^4
sbit
eoc=P0^5
sbit
oe=P0^6
unsigned
char
getvol(unsigned
char
adr)
{
unsigned
char
volnumber=0
unsigned
int
n=1000
oe=0
ale=0
adra=!(!(adr&0x01))
adrb=!(!(adr&0x02))
adrc=!(!(adr&0x04))
ale=1
st=0
st=1
st=0
while(n--)
while(!eoc)
oe=1
volnumber=voldata
oe=0
return(volnumber)
}
只要向函数传递一个0-7的地址(adra、adrb、adrc是地址线);便会返回相对应地址上的0-255的值;再根据相应的基准电压便可以计算出被测电压的值了!