#include "intrins.h"
#include<HD7279.c>
#define MAIN_Fosc 11059200L //定义主时钟
#define uchar unsigned char
#define uint unsigned int
typedef unsigned long u32;
uchar a,b,c,d,temp,vin,vout;
/***********************************************************/
#define DIS_DOT 0x20
#define DIS_BLACK 0x10
#define DIS_ 0x11
#define P1n_pure_input(bitn) P1M1 |= (bitn), P1M0 &= ~(bitn)
/****************************** 用户定义宏 ***********************************/
#define Cal_MODE 0 //每次测量只读1次ADC. 分辨率0.01V
// #define Cal_MODE 1 //每次测量连续读16次ADC 再平均计算. 分辨率0.01V
#define Timer0_Reload (65536UL -(MAIN_Fosc / 1000)) //Timer 0 中断频率, 1000次/秒
/************* 本地变量声明 **************/
u8 display_index; //显示位索引
bit B_1ms; //1ms标志
u16 msecond;
u16 Bandgap; //
u16 Get_ADC10bitResult(u8 channel); //channel = 0~7
/**********************************************/
void main(void)
{
u8 i;
u16 j;
P0M1 = 0; P0M0 = 0; //设置为准双向口
P1M1 = 0; P1M0 = 0; //设置为准双向口
P2M1 = 0; P2M0 = 0; //设置为准双向口
P3M1 = 0; P3M0 = 0; //设置为准双向口
P4M1 = 0; P4M0 = 0; //设置为准双向口
P5M1 = 0; P5M0 = 0; //设置为准双向口
P6M1 = 0; P6M0 = 0; //设置为准双向口
P7M1 = 0; P7M0 = 0; //设置为准双向口
P1M1 |= (1<<3); // 把ADC口设置为高阻输入
P1M0 &= ~(1<<3);
P1ASF = (1<<3); //P1.3做ADC
ADC_CONTR = 0xE0; //90T, ADC power on
AUXR = 0x80; //Timer0 set as 1T, 16 bits timer auto-reload,
while(1)
{
vin=Get_ADC10bitResult(3);
vin=vin*(5.0)/256*10; //转换ad值为电压值
temp=vin;
a=temp/10;
b=temp%10;
c=temp%10%1/0.1;
SEND7279_CMD_DATA(0x80,a+0x80);
SEND7279_CMD_DATA(0x80+1,b);
SEND7279_CMD_DATA(0x80+2,c);
}
}
/**********************************************/
//========================================================================
// 函数: u16 Get_ADC10bitResult(u8 channel)
// 描述: 查询法读一次ADC结果.
// 参数: channel: 选择要转换的ADC.
// 返回: 10位ADC结果.
// 版本: V1.0, 2012-10-22
//========================================================================
u16 Get_ADC10bitResult(u8 channel) //channel = 0~7
{
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xe0) | 0x08 | channel; //start the ADC
_nop_();
_nop_();
_nop_();
_nop_();
while((ADC_CONTR & 0x10) == 0) ; //wait for ADC finish
ADC_CONTR &= ~0x10; //清除ADC结束标志
return (((u16)ADC_RES << 2) | (ADC_RESL & 3));
}