0832ADC的51测试程序
#include
#include"intrins.h"
//==========================================================
sbit CS=P3^0; //使能片选
sbit CLK=P3^1; //时钟
sbit Do=P3^2; //数据输出
sbit Di=P3^2; //数据输入
sbit Do2=P3^3; //数据输出
sbit Di2=P3^3; //数据输入
sbit Do3=P3^4; //数据输出
sbit Di3=P3^4; //数据输入
sbit Do4=P3^5; //数据输出
sbit Di4=P3^5; //数据输入
sbit Do5=P3^6; //数据输出
sbit Di5=P3^6; //数据输入
unsigned char data_f=0,data_c=0,data_f2=0,data_c2=0,data_f3=0,data_c3=0,data_f4=0,data_c4=0,data_f5=0,data_c5=0; //data_f正确顺序 data_c逆序
unsigned char last[5]; //记录上一时刻各AD转换得到的值
unsigned char current[5]; //记录此次AD转换得到的值
int left = 0; //记录0.1秒内电机向左转动的步数
int right = 0;//记录0.1秒内电机向右转动的步数
sbit RS = P2^4;//Pin4
sbit RW = P2^5; //Pin5
sbit E = P2^6;//Pin6
#define Data P0 //数据端口
char data TimeNum[]=" ";
char data Test1[]=" ";
/******************************************************************/
/* 函数声明 */
/******************************************************************//***************************************************************/
void DelayUs(unsigned char us)//delay us
{
unsigned char uscnt;
uscnt=us>>1;/* Crystal frequency in 12MHz*/
while(--uscnt);
}
/******************************************************************/
void DelayMs(unsigned int ms)//delay Ms
{
while(--ms)
{
DelayUs(250);
DelayUs(250);
DelayUs(250);
DelayUs(250);
}
}
void WriteCommand(unsigned char c)
{
DelayMs(5);//short delay before operation
E=0;
RS=0;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
}
/****************************************************************/
void WriteData(unsigned char c)
{
DelayMs(5); //short delay before operation
E=0;
RS=1;
RW=0;
_nop_();
E=1;
Data=c;
E=0;
RS=0;
}
/*********************************************************************/
void ShowChar(unsigned char pos,unsigned char c)
{
unsigned char p;
if (pos>=0x10)
p=pos+0xb0; //是第二行则命令代码高4位为0xc
else
p=pos+0x80; //是第二行则命令代码高4位为0x8
WriteCommand (p);//write command
WriteData (c); //write data
}
/*************************************************************************/
void ShowString (unsigned char line,char *ptr)
{
unsigned char l,i;
l=line<4;
for (i=0;i<16;i++)
ShowChar (l++,*(ptr+i));//循环显示16个字符
}
/*********************************************************************/
void InitLcd()
{
DelayMs(15);
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x38); //display mode
WriteCommand(0x06); //显示光标移动位置
WriteCommand(0x0c); //显示开及光标设置
WriteCommand(0x01); //显示清屏
}
//////////////////////////////////////////////////////////////////////
//ADC转换函数========================================================
void ADconv()
{
unsigned char i;
//时能前初始化====================================================
Di=1;
Di2=1;
Di3=1;
Di4=1;
Di5=1;
CS=1;
_nop_();
CS=0;
Di=1;
Di2=1;
Di3=1;
Di4=1;
Di5=1;
//=================================================================
//第一个下降沿===================================================
CLK=1;
_nop_();
_nop_();
CLK=0;
//=================================================================
//确定通道方式,第二个下降沿===================================
_nop_();
_nop_();
CLK=1;
Di=1;
Di2=1;
Di3=1;
Di4=1;
Di5=1;
_nop_();
_nop_();
CLK=0;
//=================================================================
//第三个下降沿===================================================
_nop_();
_nop_();
CLK=1;
Di=0;
Di2=1;
Di3=1;
Di4=1;
Di5=1;
_nop_();
_nop_();
CLK=0; //AD初始化完成
//=================================================================
//读取数据========================================================
Di=1; //IO变为输入
Di2=1;
Di3=1;
Di4=1;
Di5=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
CLK=1;
CLK=1;
_nop_();
_nop_();
CLK=0;
0832ADC51测试程 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)