一、主函数
-
//采集AD值
-
-
#include <pic.h>
-
#include "ad.h"
-
#include "usart.h"
-
-
__CONFIG(0xFF32);
-
-
const uchar disp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,
-
0x07,0x7f,0x6f};
-
-
//延时函数
-
void delayms(uint x)
-
{
-
uint j,k;
-
for(j=x;j>0;j--)
-
for(k=110;k>0;k--);
-
}
-
-
//显示4位,低位数码管显示不正常
-
void display(uint x)
-
{
-
PORTD= disp[x/1000]|0x80;
-
PORTA= 0x10;
-
delayms(2);
-
-
PORTD= disp[x/100%10];
-
PORTA= 0x08;
-
delayms(4);
-
-
PORTD= disp[x/10%10];
-
PORTA= 0x04;
-
delayms(2);
-
-
PORTD= disp[x%10];
-
PORTA= 0x02;
-
delayms(2);
-
}
-
-
-
-
//初始化IO
-
void init()
-
{
-
TRISA = 0x01; //RA0 input mode
-
TRISC = 0xff; //RC output mode
-
TRISD = 0;
-
PORTC = 0x01;
-
-
ADCON0 = 0x41; //ADCS1:ADCS0=01,AN0,,A/D On
-
ADCON1 = 0x8E; //right justified,ADCS2=0,1110
-
delayms(10);
-
}
-
-
//获取AD值
-
uint getad()
-
{
-
uint adval;
-
float advalf;
-
GO = 1;
-
while(GO);
-
adval = ADRESH;
-
adval = adval<<8|ADRESL;
-
advalf = adval/1023.0*5.0; //转换成电压
-
adval = (uint)(advalf*1000); //转换成4位整型
-
return (adval);
-
}
-
-
void main()
-
{
-
uint i = 0;
-
uint temp;
-
init();
-
usart_init();
-
while(1)
-
{
-
temp = getad();
-
display(temp);
-
if(i == 100)
-
{
-
usart_tx(temp>>8);
-
usart_tx(temp);
-
i=0;
-
}
-
delayms(5);
-
i++;
-
}
- }
二、usart函数
-
#include <pic.h>
-
#include "usart.h"
-
-
//串口初始化
-
void usart_init(void)
-
{
-
SPBRG = 0xC; //波特率19200
-
TXSTA = 0x24; //开启发送,高速模式
-
RCSTA = 0X90; //使能TXRX引脚,接收到CREN直到被清零
-
RCIE = 0X1; //使能接受中断
-
GIE = 0X1; //开启总中断
-
PEIE = 0X1; //开启串口中断
-
}
-
-
void interrupt usart(void)
-
{
-
if(RCIE && RCIF)
-
{
-
TXREG = RCREG; //返回接收的数据
-
}
-
}
-
-
void usart_tx(unsigned char date)
-
{
-
TXREG = date;
-
while(TRMT!=1);
- }