📄 main.c
字号:
#include "iom16v.h"
#include "macros.h"
#include "lcd.h"
//#include <stdio.h>
// #include <stdlib.h> //sprintf函数用
//#include <string.h> //字符连接函数用
#define uchar unsigned char
#define uint unsigned int
uchar str[]="电压为 毫伏";
uchar str2[4] ;
float adc_data; //不能为uint型,否则只显示个位
uint vcc;
void delay_ms(uchar i)
{
uchar a,b;
for(a=1;a<i;a++)
for(b=1;b<141;b++)
{;}
}
/*****************字符连接函数********************/
/*void strcatenate(char t[], char s[] )
{
strcat(t,s);
} */
/****************电压i伏特转换为对应字符*************************/
void change(uint i,uchar *p) //显示处理
{ p[3]=i%10+48;//个
p[2]=i/10%10+48;//十
p[1]=i/100%10+48;//百
p[0]=i/1000%10+48;//千
}
#pragma interrupt_handler adc_end: 15
void adc_end(void)
{
adc_data=(float)(ADCH*4+ADCL/64);
if (adc_data>3*1024/5) //大于3V PB0亮
PORTB=~0B001;
else if (adc_data<0.5*1024/5) //小于0.5V PB1亮
PORTB=~0B010;
else
PORTB=~0B100; //0.5~3V PB2亮
ADCSRA |= 0X40;
}
void main(void)
{
uchar i=0;
DDRA=0X00;
PORTA=0XFF;
DDRB=0XFF;
PORTB=0XFF;
DDRC=0X00;
PORTC=0X00;
/**************配置LCD12864*********************/
DDRC |=BIT(6); //设置输出
PORTC &= ~BIT(6); //L:serial mode 串行
DDRC &= ~BIT(7); //设置输入
PORTC &= ~BIT(7); //LCD的NC脚悬空
DDRD &= ~BIT(7); //设置输入
PORTD &= ~BIT(7); //RST复位低电平有效
/*****************************************/
DDRD=0X00;
PORTD=0XFF;
LCD_Init();
ADMUX=0X61; //PA1为AD电压采样通道
ADCSRA=0XCB;
SEI();
while(1)
{
//strcatenate(str20,str2);
//sprintf(str2,"%f",vcc); // 转换float 到 char
vcc=(uint)(adc_data*5000/1024);
change( vcc ,str2) ; //显示处理
delay_ms(20);
// LCD_ClearTXT( );
LCD_PutStr(0,0,str);
LCD_PutStr(0,3,str2);
delay_ms(2);
// for(;;)
// {
// continue;
// }
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -