导航:首页 > 操作系统 > chl单片机

chl单片机

发布时间:2022-10-22 15:14:03

1. 单片机程序详细讲解

如此详细的注释,你还要怎么“详解”,个人觉得你还是应该多看看单片机原理书籍。

2. 求助:关于89C52单片机定时器中断产生PWM的问题。

TH1,TL1开始没有赋初值,所以第一次就需要65毫秒才能进入中断,而且你的中断服务程序特别是定时器的中断服务程序处理东东太多,看开始还加上了延时,你想想定时器最大溢出时间才六十多毫秒,显然是无法完成这个艰巨任务的。

3. avr单片机之延时问题

/*******************************************
文件:MEGA16_AD.C
环境:编译为ICC AVR6.25A,仿真为AVR Studio4.10
硬件:ATMEGA16芯片
日期:2006年12月10日
功能:驱动MEGA16片上自带的AD转换器
备注:参考《AVR系列单片机C语言编程与应用实例》(清华大学出版社)
/******************************************/
#include <iom16v.h> //包含型号头文件
#include <macros.h> //包含"位"操作头文件
#include <stdio.h> //标准输入输出头文件
#include <AVR_PQ1A.h> //包含自定义常量头文件
#include "SMG.C" //包含数码管显示函数

/*******************************************
函数名称: Mega16_ad
功 能: 对指定的通道进行模数转换
参 数: chl--指定的通道(本开发板只用了通道0)
返回值 : addata--10位数据输出
/********************************************/
uint Mega16_ad(uchar chl)
{
uint addata;
DDRA&=~(BIT(PA0)|BIT(PA1)); //转换口设置为输入、无上拉
PORTA&=~(BIT(PA0)|BIT(PA1));
ADMUX=0; //采用外部参考电压,输出数据右对齐
ADMUX|=chl; //设置指定的通道
ADCSR=0x80; //采用单次转换,查询模式,2分频
ADCSR|=BIT(ADSC); //启动转换
while(!(ADCSR&(BIT(ADIF)))); //等待转换结束
addata=ADCL; //读取低8位数据
addata+=ADCH*256; //读取高8位数据
return addata;
}
/*******************************************
函数名称: Num_BCD
功 能: 将一个字节的整数转换成三位BCD码
参 数: num--需要转换的整数
返回值 : chr--三位BCD码数组指针
/********************************************/
uchar* Num_BCD(uchar num)
{
uchar i,chr[3];
uchar *rept;
rept=&(chr[0]); //返回指针指向BCD码数组
for(i=0;i<3;i++)
{
chr[2-i]=num%10; //对10取余数(其实是求模,但是对于正数,取余与求模是相等的)
num/=10; //除以10,为取出下一位做准备
}
return rept; //返回指针
}
/*******************************************
函数名称: main
功 能: 驱动MEGA16的AD,并在数码管上显示采集值
参 数: 无
返回值 : 无
/********************************************/
void main(void)
{
uchar *adpt; //定义一个接受返回指针的指针变量
uchar i,ad0[3];
Board_init( ); //初始化开发板
while(1)
{
adpt=Num_BCD(Mega16_ad(0)/4); //启动AD转换通道0,同时将数值转换成BCD码
for(i=0;i<3;i++) //将转换后的BCD码存入显示数组
{
ad0[i]=*(adpt+i);
}
for(i=0;i<3;i++) //显示转换的数值
{
One_smg_display(ad0[i],i+1);
Delayms(2);
}
}
}

4. 单片机简单的AD转换程序问题

玩了8年的程序,竟然看不懂这一小段,俺也是丢人丢大了。
不过话说,能把 C语言的 可读性 侮辱成这样,也算是 程序猿中的 奇葩了!

5. 单片机pcf8591 ad转换输出四个通道,可是,我写的时候他并不是按1,2,3,4显示的,而是4,1,2,3显示,为什么

也可能是你启动通道一时,它刚刚结束了通道四的转换。

把启动顺序改为:2341,即可。

6. 利用STC89C52单片机以及PCF8591的AD转换设计一个数字电压表,求大神给个程序例子,在线等!!!急!!!

这是吴鉴鹰单片机开发板配套的例程。

/*-----------------------------------------------

名称:IIC协议PCF8591AD/DA转换

内容:使用4路AD中的4路检测外部模拟量输入使用液晶显示

------------------------------------------------*/

#include<reg52.h>

#include"i2c.h"

#include"delay.h"

#include"1602.h"

#include<stdio.h>


#defineAddWr0x90//写数据地址

#defineAddRd0x91//读数据地址


externbitack;

unsignedcharReadADC(unsignedcharChl);

bitWriteDAC(unsignedchardat);

/*------------------------------------------------

主程序

------------------------------------------------*/

main()

{

unsignedcharnum=0,i;

unsignedchartemp[7];//定义显示区域临时存储数组

floatVoltage;//定义浮点变量

LCD_Init();//初始化液晶

DelayMs(20);//延时有助于稳定

LCD_Clear();//清屏

while(1)//主循环

{

for(i=0;i<5;i++)//连续读5次,取最后一次,以便读取稳定值

num=ReadADC(0);//读取第1路电压值,范围是0-255

Voltage=(float)num*5/256;//根据参考电源VREF算出时间电压,float是强制转换符号,用于将结果转换成浮点型

sprintf(temp,"V0%3.2f",Voltage);//格式输出电压值,%3.2f表示浮点输出,共3位数,小数点后2位

LCD_Write_String(0,0,temp);


for(i=0;i<5;i++)

num=ReadADC(1);

Voltage=(float)num*5/256;

sprintf(temp,"V1%3.2f",Voltage);

LCD_Write_String(8,0,temp);


for(i=0;i<5;i++)

num=ReadADC(2);

Voltage=(float)num*5/256;

sprintf(temp,"V2%3.2f",Voltage);

LCD_Write_String(0,1,temp);


for(i=0;i<5;i++)

num=ReadADC(3);

Voltage=(float)num*5/256;

sprintf(temp,"V3%3.2f",Voltage);

LCD_Write_String(8,1,temp);

//主循环中添加其他需要一直工作的程序

DelayMs(200);


}

}


/*------------------------------------------------

读AD转值程序

输入参数Chl表示需要转换的通道,范围从0-3

返回值范围0-255

操作分四步:

(1)、发送地址字节,选择该器件。

(2)、发送控制字节,选择相应通道。

(3)、重新发送地址字节,选择该器件的读写。

(4)、接收目标通道的数据。

------------------------------------------------*/

unsignedcharReadADC(unsignedcharChl)

{

unsignedcharVal;

Start_I2c();//启动总线

SendByte(AddWr);//发送器件地址

if(ack==0)return(0);

SendByte(0x40|Chl);//发送器件子地址

if(ack==0)return(0);

Start_I2c();

SendByte(AddWr+1);//10010001是读命令

if(ack==0)return(0);

Val=RcvByte();

NoAck_I2c();//发送非应位

Stop_I2c();//结束总线

return(Val);

}

阅读全文

与chl单片机相关的资料

热点内容
服务器怎么用不会断电 浏览:300
主从服务器有什么用 浏览:213
jstlpdf 浏览:14
安卓原神在哪个app下载 浏览:808
单片机编程技术什么意思 浏览:104
e点课堂源码 浏览:45
免费打击垫app哪个好 浏览:532
程序员必装的6款软件 浏览:750
基于单片机的遥控器设计 浏览:521
安卓如何取消圆图标 浏览:11
收件服务器怎么样 浏览:48
建筑设计规范pdf 浏览:98
如何合并两个pdf 浏览:174
刷机包必须要解压的单词 浏览:483
android课表实现 浏览:864
头条app在哪里能看见有什么活动 浏览:511
冰柜压缩机电容80欧 浏览:609
安卓各个版本图标什么样 浏览:152
无锡哪里有制作手机app 浏览:538
php字符串转json数组 浏览:6