当前位置:首页 > 单片机 > 单片机
[导读]四、ATMEGA16的定时/计数器四—(04)、0~5V数字电压调整器PWM数字电压调整器由于定时器2(就是上一个实验)只能构成8位的PWM,作为数字电压调整器其精度不够,这里用定时器1构成10位PWM来实现0~5V的数字电压调整值显

四、ATMEGA16的定时/计数器

四—(04)、0~5V数字电压调整器

PWM数字电压调整器
由于定时器2(就是上一个实验)只能构成8位的PWM,作为数字电压调整器其精度不够,这里用定时器1构成10位PWM来实现0~5V的数字电压调整值





显然精度提高了吗~你看看后面的小数点就懂得了~~呵呵,按键按的我手疼~~就不按了~~

下面的是程序:(我以后只给出主程序~~)

//------------------------------------------------------------------------------
//PWM数字电压调整器
//由于定时器2只能构成8位的PWM,作为数字电压调整器其精度不够,这里用定时器1构成10位PWM来实现0~5V的数字电压调整值
#include"ioavr.h"
#include"intrinsics.h"
#include"lcdinit.h"
#include"delayics.h"
#include"bitics.h"
//------------------------------------------------------------------------------
uchar __flash title[]={"PWM Test"};
uchar __flash test[]={"OCR1:0000 0.000V"};
uintwide;
//------------------------------------------------------------------------------
//端口初始化函数
voidport_init()
{
DDRA=0XFF;
PORTA=0X00;
DDRB=0XFF;
PORTB=0X00;

DDRD=0XF0;
PORTD=0X0F;
}
//------------------------------------------------------------------------------
//T1初始化函数
voidtimer1_init()
{
TCCR1A=0X83;//选中通道A,工作在十位相位修正PWM模式下,8分频
TCCR1B=0X02;
}
//------------------------------------------------------------------------------
//芯片初始化函数
voiddevice_init()
{
port_init();
timer1_init();
}
//------------------------------------------------------------------------------
//按键INT0检测函数
voidint0_scan()
{
if(GET_BIT(PIND,2)==0)
{
delay_ms(4);
{
if(GET_BIT(PIND,2)==0)
{
if(wide<1023)
wide++;
while(!GET_BIT(PIND,2));//等待松手!!!
}
}
}
}
//------------------------------------------------------------------------------
//按键INT1检测函数
voidint1_scan()
{
if(GET_BIT(PIND,3)==0)
{
delay_ms(4);
if(GET_BIT(PIND,3)==0)
{
if(wide>0)
wide--;
while(!GET_BIT(PIND,3));//等待松手~~~~
}
}
}
//------------------------------------------------------------------------------
//main
voidmain()
{
long x;
uintvoltage,temple;
device_init();
lcd_init();
delay_s(1);
lcd_display_chars(0x80,title,8);
lcd_display_chars(0x80+0x40,test,16);
while(1)
{
voltage=wide;
temple=wide;
OCR1AH=(uchar)(wide>>8);//给OCR1AH,OCR1AL装数值
OCR1AL=(uchar)(wide&0x00ff);
int0_scan();
int1_scan();

lcd_display_onechar(0x80+0x40+5,(temple/1000)+0x30);
lcd_display_onechar(0x80+0x40+6,(temple00/100)+0x30);
lcd_display_onechar(0x80+0x40+7,(temple0/10)+0x30);
lcd_display_onechar(0x80+0x40+8,(temple)+0x30);

x=(long)voltage;
x=(x*5000)/1023;
voltage=(uint)x;

lcd_display_onechar(0x80+0x40+10,(voltage/1000)+0x30);
lcd_display_onechar(0x80+0x40+12,(voltage00/100)+0x30);
lcd_display_onechar(0x80+0x40+13,(voltage0/10)+0x30);
lcd_display_onechar(0x80+0x40+14,(voltage)+0x30);
}
}


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

74LS192是一款广泛应用在数字电子系统中的同步十进制可逆计数器集成电路,属于美国德州仪器(TI)早期推出的7400系列TTL逻辑家族的一员。该芯片设计为四位二进制计数器,并因其特殊的十进制计数特性以及双向计数能力而广...

关键字: 74ls192 计数器

2023年11月28日 – 提供超丰富半导体和电子元器件™的业界知名新品引入 (NPI) 代理商贸泽电子 (Mouser Electronics) 宣布与全球工业自动化领域知名供应商Siemens签订代理协议。Sieme...

关键字: 工业自动化 人机接口 计数器

外部输入、输出继电器、内部继电器、定时器、计数器等器件的接点可多次重复使用,无需用复杂的程序结构来减少接点的使用次数。

关键字: plc编程 定时器 计数器

单片机可以通过“定时/计数模式选择位C/T”令定时/计数器工作于定时或计数模式下,也可通过“工作方式选择位M1M0”设定其工作方式。C/T和M1M0等与定时/计数器有关的位在寄存器TCON或TMOD中,见表4-8和表4-...

关键字: 寄存器 计数器 定时器

在家电产品和工业应用系统中,定时和计数是两种常用的功能,如:微波炉加热计时和流水线上产品数目统计等。MCS-51单片机内部集成的两个可编程定时/计数器T0和T1使用灵活、方便,在仪器仪表等工业产品中应用广泛。

关键字: 计数器 定时器 单片机

TMOD 的地址是 89H ,它不能位寻址 ,它里面的内容被称为方式字,设置时一次写入,其各位的定义如图 6.2 所示。高 4 位用于定时器 T1 ,低 4 位用于定时器 T0 。

关键字: 定时器 计数器 单片机

单片机定时器其实跟我们平时常说的计数器,是同一个电子元件,只不过计数器记录的是单片机外部情况,所接收的也是外部脉冲,而定时器则是由单片机自身提供的一个非常稳定的计数器,这个稳定的计数器就是单片机上连接的晶振部件。

关键字: 定时器 计数器 单片机

电子专业的学生或爱好者总是喜欢为他们的家庭或学校制作各种电路,尤其是那些会闪烁几盏灯的电路。市场上有许多电路和套件可以周期性、随机或顺序地闪烁任意数量的 LED 或灯,但是一种非常通用的 IC 可用于制作简单的 LED...

关键字: LED 闪光灯驱动 计数器

德科集团(The Adecco Group)的最新研究,面对日益加剧的经济不确定性,企业必须解决员工经济和福利问题,以在这些不确定时期为员工提供支持,并避免员工离职。德科集团调研发现:全球五分之三(61%)的人担心他们的...

关键字: ECC GROUP 定时 UI

摘要:高压磁电机是航空活塞发动机点火系统中的核心部件,磁电机内定时和发动机外定时关乎发动机的正常运转。没有准确的定时,发动机可能无法正常启动或者异常抖动。此外,点火系统的检查亦关系到发动机能否持续正常工作。基于此,详细分...

关键字: 磁电机 定时 点火系统
关闭
关闭