📄 ztlc1543.c
字号:
/*-------------------------------------------------------------
**
** 版权:上海航虹高科技有限公司,2002年
**
** 文件名:TLC1543b.c
**
** 描述: 本文件是与5196ET实验机配套完成的实验程序。
**--------------------------------------------------------------
*/
/*-------------------------------------------------------------
** 文件包括
**-------------------------------------------------------------
*/
/*-------------------------------------------------------------
**
**
*/
#include <reg51.h> //定义51单片机特殊功能寄存器的值的标准头文件
#define XBYTE ((unsigned char volatile *) 0x020000L)
//#define CBYTE ((unsigned char volatile *) 0x050000L)
//#define DBYTE ((unsigned char volatile *) 0x040000L)
#define z8279 XBYTE[0x0f239] //8279命令/状态口//
#define d8279 XBYTE[0x0f238] //8279数据口//
sbit clk=P1^0;
sbit addr=P1^1;
sbit adcs=P1^2;
sbit eoc=P1^3;
sbit dout=P1^4;
unsigned char data i,x1;
unsigned char data j,addrD;
unsigned int data adData;
unsigned char data disp[4];//显示
unsigned char code led[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
/* 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7, 8 , 9*/
0x77,0x7c,0x39,0x5e,0x79,0x71,0x00};
//a,b,c,d,e,f,0
/*-------------------------------------------------------------
** 函数定义
**-------------------------------------------------------------
*/
/*-------------------------------------------------------------
** 函数名:adOut
** 格式: void adOut()
** 返回值: 无
** 描述: 模数转换
** 算法:从高位一位位传送,在CLK上升沿有效
**-------------------------------------------------------------
*/
void adOut()//anolog to digitial (on the rising edge of i/o clk)
{
// unsigned char data i;
adcs=0;
adData=0;
x1=addrD;
for(i=0;i<10;i++)
{
if(i<4) //first four write address
{
if((x1&0x08)==0)
addr=0;
else
addr=1;
x1=x1<<1;
}
adData=adData<<1;//digital data out
if(dout==1)
adData+=0x01;
clk=1;
clk=0;
}
adcs=1; //cs用于1、3、5mode
}
/*-------------------------------------------------------------
** 函数名:mSecond
** 格式: void mSecond()
** 返回值: 无
** 描述:时间延时
** 算法:嵌套循环产生时间延时
**-------------------------------------------------------------
*/
void mSecond(unsigned int time) //延迟x ms
{
unsigned char data i;
while(time--)
{
for (i=0;i<125;i++){;}
}
}
/*-------------------------------------------------------------
** 函数名:dispLed
** 格式: void dispLed()
** 返回值: 无
** 描述:8279显示方式
** 算法:将10位数据送3个显示缓冲区,送数据口
**-------------------------------------------------------------
*/
void dispLed()
{
unsigned char num;
disp[0]=adData&0x00f;
disp[1]=(adData>>4)&0x00f;
disp[2]=(adData>>8)&0x00f;
disp[3]=0x10;
disp[4]=addrD;
for(num=0;num<=4;num++)
{
z8279=0x80+num; //显示的RAM地址加上位置偏移量n
d8279=led[disp[num]]; //数据x1送8279数据口地址
}
}
/*-------------------------------------------------------------
** 函数名:sta8279
** 格式: void sta8279()
** 返回值: 无
** 描述:8279初始化
** 算法:将显示方式、扫描速率、和清除命令送命令/状态口
**-------------------------------------------------------------
*/
void sta8279() //初始化8279
{
z8279=0x00; //00表示左键输入,八位字符显示
z8279=0x2f; //2f表示键盘扫描速率
z8279=0xc1; //C1清除显示RAM
}
/*-------------------------------------------------------------
** 函数名:main
** 格式: void main()
** 返回值: 无
** 描述:主程序
** 算法:初始化及检测14路模拟通道请情况,完成AD转换,
**-------------------------------------------------------------
*/
void main ()
{
sta8279();
adcs=1;
clk=0;
while(1)
{
addrD=0x00;
for(j=0;j<=13;j++)//11个通道加上3个测试模式
{
while (eoc==0){}
adOut();
dispLed();
mSecond(1000);
addrD++;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -