基于51单片机的TLC549数字电压表(数码管显示)

基于51单片机的TLC549数字电压表(数码管显示)

由最近,需要用到TLC549芯片。于是就用该芯片做了一个简易的数字电压表;

移植改一下对应管脚可直接使用;

 代码如下

#include <reg52.h>
#include <intrins.h>

#define uchar unsigned char 
#define uint unsigned int 

void delay(uchar ms);    //延时函数

uchar TLC549_ADC(void);   //TLC549模数转换


sbit LED1=P2^0;
sbit LED2=P2^1;
sbit LED3=P2^2;
sbit LED4=P2^3;

sbit DI  = P1^0;
sbit CS  = P1^1;
sbit CLK = P1^2;

uchar ad_0;
uint AD;

unsigned char sch[]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90,0xC1};//数码管显示数字的数组
unsigned char num[]={0X40,0X79,0X24,0X70,0X59,0X92,0X82,0XF8,0X80,0X90,0xC1};//数码管显示数字的数组
void fun(char L,Number)
{
	switch(L)//选择显示数码管
	{
		case 0:LED1=0;LED2=1;LED3=1;LED4=1;P0=num[Number];break;
		case 1:LED1=1;LED2=0;LED3=1;LED4=1;P0=sch[Number];break;
		case 2:LED1=1;LED2=1;LED3=0;LED4=1;P0=sch[Number];break;
		case 3:LED1=1;LED2=1;LED3=1;LED4=0;P0=sch[Number];break;

	}
	
	delay(1);
}

//-------------------------------------
//	            主函数 
//-------------------------------------
void main()
{

	while(1)
	 {
	  ad_0=TLC549_ADC();
	  AD=ad_0*1.97;
	  fun(0,AD%1000/100);
		fun(1,AD%100/10);
		fun(2,AD%10);
		fun(3,10);

	}
}

//----------------------------------
//               延时子程序
//----------------------------------
void delay(uchar ms)    
{       
	 uchar i ;
	 while(ms--)
	 {
	  	for(i = 0 ; i<250;i++) ;
	 }
}


//-----------------------------------------
//            TLC549模数转换
//-----------------------------------------
uchar TLC549_ADC(void)
{
	   uchar n, tmp;

        CS  = 1;                     //CS置高,片选无效
        CLK = 0;

        CS  = 0;                     //CS置低,片选有效,同时DO输出高位
        _nop_();
        _nop_();                     //适当延迟时间1.4us Setup Time

        for(n = 0; n < 8; n++) //串行数据移位输入
        { 
                tmp <<= 1;
                tmp |=  DI;

                CLK = 1;        //0.4us
                _nop_();        //延迟0.1us
                CLK = 0;        //0.4us
        }
        CS = 1;            //CS置高,片选无效
        for(n = 17; n != 0; n--) _nop_();  //下一次转换需要延迟17us
        return (tmp);

}

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值