📄 7290test.c
字号:
/****************************************Copyright (c)**************************************************
** 广州周立功单片机发展有限公司
** 研 究 所
** 产品一部
**
** http://www.zlgmcu.com
**
**--------------文件信息--------------------------------------------------------------------------------
**文 件 名: PCF8563.C
**创 建 人: 叶皓贲
**最后修改日期: 2003-3-4
**描 述: DP-1581的8563T及7289a键盘LED演示程序
**
**--------------历史版本信息----------------------------------------------------------------------------
** 创建人: 叶皓贲
** 版 本: 1.0
** 日 期: 2003-3-4
** 描 述: DP-1581演示程序
**
**------------------------------------------------------------------------------------------------------
** 修改人:
** 版 本:
** 日 期:
** 描 述:
**
**--------------当前版本修订------------------------------------------------------------------------------
** 修改人:
** 日 期:
** 描 述:
**
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include <stdio.h>
#include <intrins.h>
#include <absacc.h>
#include "VIIC_C51.h"
#include "ZLG7290.h"
#include "reg52.h"
#define DAC0832 XBYTE[0x7FFF]
#define ADC0809 XBYTE[0xBFF8]
#define ulong unsigned long
#define uint unsigned int
sbit KEY_INT=P3^3;
/* 全局变量 */
unsigned char disp_buf[8]={0,0,0,0,0,0,0,0};
unsigned char rd[8]={0,0,0,0,0,8,8,8};
unsigned char ab,cd,a,c=0 ;
float b=0.0;
unsigned char bdata sendbyte,receivebyte;//一定不要忘记加uchar 否则后果不堪设想!!!!!
sbit sda=P1^0;
sbit scl=P1^1;
sbit sendbyte7=sendbyte^7 ;
sbit receivebyte7=receivebyte^7;
/*********************************************************************************************************
** 函数名称: display
** 功能描述: 7298A led显示
** 输 入: *sd : 显示缓冲区的头地址
**
** 输 出: 0 : OK;
** 1 : FAIL;
** 全局变量: 无
** 调用模块: ZLG7289_SendBuf
**
** 作 者: 叶皓贲
** 日 期: 2003-3-4
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
unsigned char display(unsigned char *sd)
{
ZLG7290_SendBuf(rd,8);
return 0;
}
/*********************************************************************************************************
** 函数名称: DelayNS
** 功能描述: 长软件延时
** 输 入: no : 延时参数,值越大时延时越久
**
** 输 出: 0 : OK;
** 1 : FAIL;
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 叶皓贲
** 日 期: 2003-3-4
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
unsigned char DelayNS(unsigned char no)
{
unsigned char i,j; //延时参数
for(; no>0; no--)
{
for(i=0; i<100; i++)
for(j=0; j<100; j++);
}
return 0;
}
/*********************************************************************************************************
** 函数名称: delay
** 功能描述: 短软件延时
** 输 入: j : 延时参数,值越大时延时越久
**
** 输 出: 0 : OK;
** 1 : FAIL;
** 全局变量: 无
** 调用模块: 无
**
** 作 者: 叶皓贲
** 日 期: 2003-3-4
**-------------------------------------------------------------------------------------------------------
** 修改人:
** 日 期:
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
unsigned char delay(unsigned char j)
{
unsigned char k,l;
for(l=0;l<=j;l++)
for(k=0;k<=250;k++);
return 0;
}
unsigned char VI( unsigned char ab,unsigned char cd )
{unsigned char z;
float vi;
vi=(((float)ab+(float)cd/10)-15)/0.082;
z=(unsigned char)vi;
return(z+182);
}
/*
void sendstr(unsigned char *p,unsigned char n)
{
unsigned char i=0;
EA=0;
for(i=0;i<n;i++)
{
SBUF=*(p+i);
while(TI==0);
TI=0;
}
EA=1;
} */
delay1(uint i)
{
while(i--);
}
void init()
{
scl=1;
delay1(2);
sda=1;
delay1(2);
}
void start()//开始
{
sda=1;
delay1(2);
scl=1;
delay1(2) ;
sda=0;
delay1(2);
scl=0;
delay1(2);
}
void stop()//结束
{
sda=0;
delay1(2);
scl=1;
delay1(2);
sda=1;
delay1(2);
}
void write (unsigned char undata)//写入
{
unsigned char i;
for(i=8;i>0;i--)
{
sda=(bit)(undata&0x80);
undata<<=1;
scl=1;
delay1(2);
scl=0;
delay1(2);
}
}
bit check()//从机给单片机应答
{
unsigned char temp=4;
scl=0;
delay1(2);
sda=1;
delay1(2);
scl=1;
delay1(2);
while(sda&&temp)
temp--;
scl=0;
delay1(2);
if(temp)
return(0);
else
return(1);
}
void putack(bit ack1)//单片机给从机应答
{
scl=0;
delay1(2);
sda=ack1;
scl=1;
delay1(2);
scl=0;
delay1(2);
}
unsigned char read(void)//读入
{
unsigned char dat;
unsigned char i;
sda=1;
delay1(2);
for(i=8;i>0;i--)
{
scl=0;
delay1(2);
scl=1;
delay1(2);
dat<<=1;
if(sda)
dat++;
scl=0;
delay1(2);
}
return(dat);
}
void writesque( unsigned char cadress,unsigned char dadress,unsigned char*dat,unsigned char n)//写一个数组,cadress为从机地址,dadress为要存的数据地址 *data为要存入的数据 ,n为个数
{
unsigned char i=0;
while(1)
{
start();
write(cadress);//写入a0
if(check())
continue;
write(dadress);//写地址
if(check())
continue;
for(i=0;i<n;i++)
{
write(*dat++);
if(check())
break;
}
if(i!=n)
continue;
stop();
break;
}
}
readsque(unsigned char cadress, unsigned char dadress, unsigned char *dat, unsigned char n)//读一个数组,dataress为读取的首地址,*data为要存入的数据,n为存入的个数
{
unsigned char i=0;
while(1)
{
start();
write(cadress);
if(check())
continue;
write(dadress);
if(check())
continue;
start();
write(cadress+1);
if(check())
continue;
for(i=0;i<n;i++)
{
*dat++=read();
if(i==n-1) //读最后一个数据后要输出高
putack(1);
else
putack(0);//其他的都输出低
}
stop();
break;
}
}
void main()
{ unsigned char key,i1=0;
readsque(0xa0,0x00,&rd[5],3);
ab=rd[5]*10+rd[6];
cd=rd[7];
DAC0832=VI(ab,cd);
display(rd);
DelayNS(100);
while(1)
{
display(rd);
ADC0809=1;
DelayNS(5);
b=ADC0809;
b=(float)b*3.985*5.0/256;
b=b*10;
c=(unsigned char)b;
rd[5]=c/100 ;
rd[6]=c/10-10*rd[5];
rd[7]=c%10;
writesque(0xa0,0x00,&rd[5],4);
delay(10);
if(KEY_INT==0)
{
key=ZLG7290_GetKey();
switch(key)
{ case 28 : rd[i1++]=1;
break;
case 27 : rd[i1++]=2;
break;
case 26 : rd[i1++]=3;
break;
case 20 : rd[i1++]=4;
break;
case 19 : rd[i1++]=5;
break;
case 18 : rd[i1++]=6;
break;
case 12 : rd[i1++]=7;
break;
case 11 : rd[i1++]=8;
break;
case 10 : rd[i1++]=9;
break;
case 4 : rd[i1++]=-1;
break;
case 3 : rd[i1++]=0 ;
break;
case 2 : rd[i1++]=11;
break;
default :
break;
}
}
while (rd[4]==11)
{ rd[4]=0;
ab=rd[0]*10+rd[1];
cd=rd[3];
DAC0832=VI(ab,cd);
display(rd);
i1=0;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -