#include<reg52.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
sfr ADC_CONTR=0xBC;
sfr ADC_RES =0xBD;
sfr P1ASF =0x9D;
sfr AUXR1 =0xA2;
sfr ADC_RESL =0xBE;
uchar ADC_Power_On_Speed_Channe1_0=0xE0;
uchar ADC_Power_On_Speed_Channe1_1=0xE1;
uchar ADC_Power_On_Speed_Channe1_2=0xE2;
uchar ADC_Power_On_Speed_Channe1_3=0xE3;
uchar ADC_Power_On_Speed_Channe1_4=0xE4;
uchar ADC_Power_On_Speed_Channe1_5=0xE5;
uchar ADC_Power_On_Speed_Channe1_6=0xE6;
uchar ADC_Power_On_Speed_Channe1_7=0xE7;
uchar ADC_Channe1_0_Result;
uchar ADC_Channe1_1_Result;
uchar ADC_Channe1_2_Result;
uchar ADC_Channe1_3_Result;
uchar ADC_Channe1_4_Result;
uchar ADC_Channe1_5_Result;
uchar ADC_Channe1_6_Result;
uchar ADC_Channe1_7_Result;
void ADstart(void);
void display(void);
void delay(uchar x);
uchar data1[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};//不带小数点的数码
uchar data2[16]={0xBf,0x86,0xDb,0xCf,0xE6,0xEd,0xFd,0x87,0xFf,0xEf,0xF7,0xFc,0xB9,0xDe,0xF9,0xF1};//带小数点的数码
uchar data3[2]={0};
void main()
{
ADC_CONTR=ADC_CONTR|0x80;// 打开AD转换电源
P1ASF=0x00;//设置p1.2为模拟功能
ADC_CONTR=ADC_Power_On_Speed_Channe1_0;//设置p1.2为ad转换通道
delay(1);
while(1)
{
ADstart();
display();
}
}
void ADstart(void) //开始进行转换
{ uchar x1, x2;
ADC_RES=0;
ADC_CONTR=ADC_CONTR|0x08;
while( !(ADC_CONTR&&0x10))
{
display();
}
display();
ADC_CONTR=ADC_CONTR&0xEF;
ADC_Channe1_0_Result=ADC_RES;
x1=(int)(5*ADC_Channe1_0_Result/256);
x2=(5*ADC_Channe1_0_Result)%256;
x2=(int)((3*x2)/256);
data3[0]=x1;
data3[1]=x2;
}
void display(void)
{
uchar i,j;
i=data3[0];
j=data3[1];
P2=0;
P0=data2[i];
delay(2);
P2=1;
P0=data1[j];
delay(2);
}
void delay(uchar x)
{
uchar j1;
while(x--)
{
for(j1=0;j1<125;j1++)
{;}
}
}
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sfr ADC_CONTR=0xBC;
sfr ADC_RES =0xBD;
sfr P1ASF =0x9D;
sfr AUXR1 =0xA2;
sfr ADC_RESL =0xBE;
uchar ADC_Power_On_Speed_Channe1_0=0xE0;
uchar ADC_Channe1_0_Result;
void ADstart(void);
void delay(uchar x);
uint temp;
void main() //对于串口,P3^0为接受,P3.1为发送,P1.7为串行时钟,方式0发送时REN设为0,P3.0串行输出P3.1同步脉冲
{
ADC_CONTR=ADC_CONTR|0x80;// 打开AD转换电源
P1ASF=0x00;//设置p1.0为模拟功能
ADC_CONTR=ADC_Power_On_Speed_Channe1_0;//设置p1.0为ad转换通道
temp=0x00;
SCON=0x50;
//PCON=PCON & 0x7F;
TMOD=0x20;
TH1=0xFD;
TL1=0xFD;
TR1=1;
TI=0;
EA=1;
ES=1;
SBUF=0x00;
while(1)
{
ADstart();
}
}
void ADstart(void) //开始进行转换
{
ADC_RES=0;
ADC_CONTR=ADC_CONTR|0x08;
while( !(ADC_CONTR&&0x10))
{
;
}
ES=0;
ADC_CONTR=ADC_CONTR&0xEF;
temp=ADC_RES;
//temp = 0x01;
ES=1;
}
void UART_SER(void) interrupt 4
{
if(RI)
{
ES=0;
RI=0;
P0=~P0;
// P1=~P1;
//temp=SBUF;
ES=1;
}
if(TI)
{
TI=0;cstring转为int
//P0=~P0;
//P1=~P1;
delay(100);
//TI=0;
SBUF=temp;
//TI=0;
}
}
void delay(uchar x)
{
uchar j1;
while(x--)
{
for(j1=0;j1<125;j1++)
{;}
}
}
/////////////////////////////////////////////////
一下是但文档通信的主要代码
////////////////////////////////////////////////
/
/ 单文档串口View.cpp : implementation of the CMyView class
//
#include "stdafx.h"
#include "单文档串口.h"
#include "单文档串口View.h"
#include "assert.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/
/////////////////////////////////0///////////////////////////////////////////
// CMyView
IMPLEMENT_DYNCREATE(CMyView, CView)
BEGIN_MESSAGE_MAP(CMyView, CView)
//{{AFX_MSG_MAP(CMyView)
ON_WM_CREATE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
BEGIN_EVENTSINK_MAP(CMyView, CView)
//{{AFX_MSG_MAP(CChuankoutongxinDlg)
ON_EVENT(CMyView,IDC_MSCOMM1,1,OnComm,VTS_NONE)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
// Standard printing commands
END_EVENTSINK_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMyView construction/destruction
CMyView::CMyView()
{
// TODO: add construction code here
i=0;
dataout1=0;
dataout2=0;
sdata=0;
fsdata=0;
AddrFlg=0;
Addr=255;
AddrLinshi=0;
}
CMyView::~CMyView()
{
}
BOOL CMyView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
/
/ CMyView drawing
void CMyView::OnDraw(CDC* pDC)
{
CMyDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CMyView printing
BOOL CMyView::OnPreparePrinting(CPrintInfo* pInfo)
{
/
/ default preparation
return DoPreparePrinting(pInfo);
}
void CMyView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CMyView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/
////////////////////////////////////////////////////////////////////////////
// CMyView diagnostics
#ifdef _DEBUG
void CMyView::AssertValid() const
{
CView::AssertValid();
}
void CMyView::Dump(CDumpContext&
dc) const
{
CView::Dump(dc);
}
CMyDoc* CMyView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMyDoc)));
return (CMyDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CMyView message handlers
void CMyView::OnComm()
{
/
/ VARIANT variant_inp;
COleVariant myVar;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[1024];
CString strtemp;
CString strDisp;
// int AddrLinshi;
if(m_MSComm.GetCommEvent()==2)
{
// variant_inp=m_MSComm.GetInput();
myVar.Attach(m_MSComm.GetInput());
// safearray_inp=variant_inp;
safearray_inp=myVar;
len=safearray_inp.GetOneDimSize();
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);
for(k=0;k<len;k++)
{
DataLinshi =*(char *)(rxdata+k);
// strtemp.Format("%c",bt);
// strDisp+=strtemp;
/
/ char charc = *(char *)(rxdata+k);
/////////////////////////////////////////////////////////////////////////////////////////
AddrLinshi=DataLinshi & 248; //判断是否为地址的形式
//////////////////////////////////////////////////////////////////////////////////////////
if((AddrLinshi==80)||(AddrLinshi==168))//是否为地址形式,是则转入地址处理函数,
AddrProcess();
else //不是则转入数据处理形式
DdataProess();
Display(); //调用数据换算及界面显示函数
///////////////////////////////////////////////////////////////////////////////////////////
/* if(AddrLinshi!=80) //不为 则转向数据处理函数
DdataProess();
else //为地址形式则处理地址
{
if(AddrFlg!=0) //已经有地址了,则此地址形式可能为数据则转向数据处理函数
DdataProess();
if(AddrFlg==0) // 还没有地址,则保存地址,并置地址的标志为 1
{
Addr=(int) (DataLinshi & 7);
AddrFlg=1;
}
}
*/
/////////////////////////////////////////////////////////////////////////////////////////
/* if(i==0)
{
dataout1=*(int *)(rxdata+k);
i++;
}
else
{
dataout2=*(int *)(rxdata+k);
i=0;
}
sdata=(int) (dataout1+dataout2*256);
fsdata=(float)sdata/1024*4.84;
// sdata=126+2*256;
/////////////////////////////////////////////////////////////////////////////////////////
if (data1.m_hWnd!=NULL)
{
data1.UpdateData(true);
m_ndatastore=data1.m_nstringout;
data1.m_nstring.Format("%d",sdata);
// data1.m_nstring+=strtemp;
data1.m_dataout=sdata;
data1.m_nVoitageDis=fsdata;
data1.m_nstringout=m_ndatastore;
data1.UpdateData(false);
}
else
{
data1.Create(IDD_DIALOG1,NULL);
data1.UpdateData(true);
m_ndatastore=data1.m_nstringout;
data1.m_nstring.Format("%d",
sdata);
// data1.m_nstring+=strtemp;
data1.m_dataout=sdata;
data1.m_nVoitageDis=fsdata;
data1.m_nstringout=m_ndatastore;
data1.UpdateData(false);
data1.ShowWindow(SW_SHOW);
}*/
}
}
}
/
///////////////////////////////
int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
m_MSComm.Create(NULL,0,CRect(0,0,0,0),this,IDC_MSCOMM1);
m_MSComm.SetCommPort(1);
m_MSComm.SetInBufferSize(1024);
m_MSComm.SetOutBufferSize(1024);
m_MSComm.SetInputLen(0);
m_MSComm.SetInputMode(1);
m_MSComm.SetRThreshold(1);
m_MSComm.SetSettings("9600,n,8,1");
if(!m_MSComm.GetPortOpen())
m_MSComm.SetPortOpen(true);
else
AfxMessageBox("Open Seeial Port Failure !");
m_MSComm.GetInput();
return 0;
}
//////////////////////////////////////////////
bool CMyView::DdataProess()
{
if((AddrFlg==2)||(AddrFlg==3))
{
if(AddrFlg==2)
{
dataout1=(int)DataLinshi;
AddrFlg=3;
return 1;
}
if(AddrFlg==3)
{
dataout2=(int)DataLinshi;
AddrFlg=0;
Addr=255;
return 1;
}
}
else
{
AddrFlg=0;
Addr=255;
}
return 1;
}
bool CMyView::AddrProcess()
{
if(AddrFlg==0)
{
if(AddrLinshi==80)
{
Addr=(int) (DataLinshi & 7);
AddrFlg=1;
return 1;
}
else
{
Addr=255 ;
return 1;
}
}
else if(AddrFlg==1)
{
if((AddrLinshi==168)&&(Addr==(int) (DataLinshi & 7)))
{
AddrFlg=2;
return 1;
}
else
{
Addr=255;
AddrFlg=0;
return 1;
}
}
else
{
DdataProess();
}
return 1;
}
void CMyView::Display()
{
sdata=(int) (dataout1+dataout2*256);
fsdata=(float)sdata/1024*4.84;
/////////////////////////////////////////////////////////////////////////////////////////
if (data1.m_hWnd!=NULL)
{
data1.UpdateData(true);
m_ndatastore=data1.m_nstringout;
data1.m_nstring.Format("%d",sdata);
// data1.m_nstring+=strtemp;
data1.m_dataout=sdata;
data1.m_nVoitageDis=fsdata;
data1.m_nstringout=m_ndatastore;
data1.UpdateData(false);
}
else
{
data1.Create(IDD_DIALOG1,NULL);
data1.UpdateData(true);
m_ndatastore=data1.m_nstringout;
data1.m_nstring.Format("%d",sdata);
// data1.m_nstring+=strtemp;
data1.m_dataout=sdata;
data1.m_nVoitageDis=fsdata;
data1.m_nstringout=m_ndatastore;
data1.UpdateData(false);
data1.ShowWindow(SW_SHOW);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论