⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ztlc1543.c

📁 MCS-51单片机实验 39个实用实验和源码
💻 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 + -