📄 iar9-6.c
字号:
#include <iom16.h>
#include<intrinsics.h>
#include "lcd1602_8bit.c"
uchar __flash title[]={"0-5 V Regulator"};
#define uchar unsigned char
#define uint unsigned int
#define xtal 8
#define GET_BIT(x,y) (x&(1<<y))
uint wide;
void port_init(void)
{
DDRA=0xff;
PORTA=0x00;
DDRB=0xff;
PORTB=0x00;
PORTD = 0x0f;
DDRD = 0xff;
__no_operation();
DDRD = 0xf0;
}
//TIMER1 initialize - prescale:8
// WGM: 0) Normal, TOP=0xFFFF
// desired value: 1000Hz
// actual value: 1000.000Hz (0.0%)
void timer1_init(void)
{
TCCR1A = 0x83;
TCCR1B = 0x02;
}
/*********************************************/
void init_devices(void)
{
port_init();
timer1_init();
}
void scan_INT1(void)
{
if(GET_BIT(PIND,3)==0)
{
Delay_nms(10);
if(GET_BIT(PIND,3)==0)
{if(wide<1023)wide++;
Delay_nms(200);}
}
}
void scan_INT0(void)
{
if(GET_BIT(PIND,2)==0)
{
Delay_nms(10);
if(GET_BIT(PIND,2)==0)
{if(wide>0)wide--;
Delay_nms(200);}
}
}
/******************主函数******************/
void main(void)
{
long x;
uint voltage,Disval;
init_devices();
Delay_nms(400);
InitLcd();
ePutstr(1,0,title);
DisplayOneChar(0,1,'O');
DisplayOneChar(1,1,'C');
DisplayOneChar(2,1,'R');
DisplayOneChar(3,1,'1');
DisplayOneChar(4,1,':');
DisplayOneChar(11,1,'.');
DisplayOneChar(15,1,'V');
while(1)
{
voltage=wide;
Disval=wide;
OCR1AH=(uchar)(wide>>8);
OCR1AL=(uchar)(wide&0x00ff);
scan_INT1();
scan_INT0();
DisplayOneChar(5,1,(Disval/1000)+0x30);
DisplayOneChar(6,1,(Disval%1000)/100+0x30);
DisplayOneChar(7,1,(Disval%100)/10+0x30);
DisplayOneChar(8,1,(Disval%10)+0x30);
x=(long)voltage;
x=(x*5000)/1023;
voltage=(uint)x;
DisplayOneChar(10,1,(voltage/1000)+0x30);
DisplayOneChar(12,1,(voltage%1000)/100+0x30);
DisplayOneChar(13,1,(voltage%100)/10+0x30);
DisplayOneChar(14,1,(voltage%10)+0x30);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -