#include "led.h"
#include "delay.h"
#include "key.h"
#include "sys.h"
#include "lcd.h"
#include "usart.h"
#define uchar unsigned char
#define uint unsigned int
#include "stm32f10x.h" //stm32固件库函数
uchar Timer0Val;
long sum;
uchar shu[5];
double m;
char n;
long o;
u8 SCK=GPIO_Pin_0; //clk IO输出 蓝
//u8 DRDY=GPIO_Pin_1; //读取管脚电平,输入IO 灰
//u8 SO=GPIO_Pin_2; //AD 输出out 读取管脚电平,输入IO
u8 SI=GPIO_Pin_3; //din IO输出
#define DRDY GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_1)
#define SO GPIO_ReadInputDataBit(GPIOE,GPIO_Pin_2)
void delayms(int xms) //延时XMS=1 1MS
{
uchar i,j;
for (i = xms;i>0;i--)
for(j = 110;j>0;j--);
}
void gpio(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
delay_init();
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE); //使能GPIOE端口时钟
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3; //BEEP--> E.3 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //根据参数初始化GPIOE.1
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; //BEEP--> E.0 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; //推挽输出
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //根据参数初始化GPIOE.0
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; //BEEP--> E.1 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //根据参数初始化GPIOE.3
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //BEEP--> E.2 端口配置
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; //浮空输入
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz
GPIO_Init(GPIOE, &GPIO_InitStructure); //根据参数初始化GPIOE.2
}
void WriteADReg(uchar Data)
{
uchar i;
SCK=1;
for (i=0;i<8;i++)
{
SCK=0; //拉低SCLK,直接开始写数据
//delayms(1);
if(Data & 0x80) //1000 0000
//从最高位开始写,先判断是否为1
SI=1; //写 1
else
SI=0; //写 0
delayms(100);
SCK=1;
delayms(100);
Data <<= 1;
//循环左移,开始写第二位
}
SCK = 1;
}
/*********AD相关函数**********/
//初始化 AD
void InitAD()
{
SCK=1;
SI=1; //DIN
WriteADReg(0x23); //AD7707初始化-读第1通道A/D转换值下写时钟寄存器
delayms(100);
WriteADReg(0x1b);//改刷新频率为20 不分频 18
delayms(100);
WriteADReg(0x13);//下写setup寄存器
delayms(100);
WriteADReg(0x40); //双极性,无缓冲,滤波同步44
delayms(100);
}
/*写AD寄存器程序*/
/*********读AD数据*******/
uint ReadADVal(void)
{
uchar i;
uint ADVal = 0;
WriteADReg(0x3b);
while(DRDY);
//DRDY为0时,开始读数
//AD的DRDY 已经输出0,但还是不读数
SCK = 1;
for(i = 0;i < 16;i++)
{
ADVal <<= 1;
SCK=0;
delayms(100);
ADVal |= SO;
SCK=1;
delayms(100);
}
SCK = 1;
//w = 0x32;
return ADVal;
//得到的是一位16位二进制数,需转换为10进制
}
void DataProcess()
{
sum = ReadADVal(); //数组sum为AD采集得到的数据,需要显示出来
m=(sum-32768)/1638.375; //转化为十进制的数
}
/***显示函数****/
void Display()
{
DataProcess();
LCD_ShowString(30,130,200,16,16,"2015");
LCD_ShowxNum(30,160,m,4,16,0); //显示数字
delay_ms(1000);
}
int main()
{
delay_init(); //延时函数初始化
NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级
uart_init(9600); //串口初始化为9600
LED_Init(); //LED端口初始化
LCD_Init();
  OINT_COLOR=RED;
LCD_Clear(YELLOW);
//Timer0Init();
//DataProcess();
while(1)
{
Display();
}
}
|