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

📄 text1.c

📁 用于简单的数模、模数转换
💻 C
字号:
#include <reg51.h>
#include <I2C.h>
#include <ZLG7290.h>

#define uchar unsigned char
#define uint  unsigned int

uchar z1;
uint Num;
uchar ge,shi,bai,qian;

//定义键盘中断标志,FlagINT=1表示有键按下
volatile bit FlagINT = 0;

/*
函数:INT0_SVC()
功能:ZLG7290键盘中断服务程序
说明:中断触发方式选择负边沿触发,因此不必等待中断请求信号恢复为高电平
*/
void INT0_SVC() interrupt 0
{  IE0=0;
	
	FlagINT = 1;
}

void Delay(uint x)           //延时函数
{
  uint i,j;
  for(i=0;i<x;i++)
     for(j=0;j<120;j++);
}

/*
函数:SystemInit()
功能:系统初始化
*/
void SystemInit()
{
	I2C_Init();
	Delay(500);		//等待ZLG7290复位完毕
}

/*
函数:ClearAll()
功能:清除所有显示
*/
void ClearAll()
{
	unsigned char x;
	for ( x=0; x<8; x++ )
	{
		ZLG7290_Download(x,0,0,31);
	}
}
                  
sbit      CS=P1^5;          //片选
sbit     SCLK=P1^6;         //时钟
sbit     DIN=P1^7;          //数据入口


sbit Tlc549_Clk  = P1^4;
sbit Tlc549_Data = P1^3;
sbit Tlc549_Cs   = P1^2;




//--------------------------------------------------
//              函数名称:    DA_Conver
//              函数功能:    DA转换
//              入口参数:    要转换的数字量,最多输出参考电压的
//                          2倍,如可采用MC1403等参考电源
//              出口参数:    无
//--------------------------------------------------
void DA_Conver(unsigned int DAValue)
{

      unsigned char i;

      DAValue <<= 6;   

      CS=0;                                 //片选DA芯片
      SCLK= 0;                              //在以下12个时钟周期内,每当在上升沿的
                                            //数据被锁存,形成DA输出。在前10个时钟
      for(i = 0; i < 12; i++)               //内输入的是10位DA数据,后两个时钟周期
      {                                     //为填充字节。
          DIN= (bit)(DAValue & 0x8000);   
          SCLK= 1;                         
          DAValue <<= 1;                   
          SCLK= 0;
      }

      CS= 1;                               //CS的上升沿和下降沿只有在clk为低的时候
      SCLK= 0;                              //才有效

}

int Read_Key()
{
	unsigned char KeyValue;
	ClearAll();
	EA = 0;
	IT0 = 1;	//负边沿触发中断
	EX0 = 1;	//允许外部中断
	EA = 1;
	if(FlagINT)		                              //如果有键按下
	  {
	    FlagINT = 0;                              //清除中断标志
	    ZLG7290_ReadReg(ZLG7290_Key,&KeyValue);   //读取键值
        return(KeyValue);
	  }
	PCON|= 0x01;	                              //使CPU进入空闲状态,任一中断可唤醒
}

void Display(uchar qian,uchar bai,uchar shi,uchar ge)
{
  bit dp;
  bit flash;
  dp = 0;
  flash = 0;
  ZLG7290_Download(4,dp,flash,ge);
  ZLG7290_Download(5,dp,flash,shi);
  ZLG7290_Download(6,dp,flash,bai);
  ZLG7290_Download(7,dp,flash,qian);
}

uchar Tlc549()
{
  uchar i,T1=0;
  Tlc549_Cs =0;              //使能549
  for(i=0;i<8;i++)
   {
     Tlc549_Clk =1;          //准备好数据
     T1=T1<<1;               //左移1位
     if(Tlc549_Data==1) 
       T1=T1+1;              //保存本次移出的位
       Tlc549_Clk =0;        //打出下一位数据
   }

  Tlc549_Cs =1;              //释放对TLC945的控制
  return T1;
}

void main()
{ 
  int DA_Value;
  SystemInit();		   //系统初始化             
  Delay(500);
  while(1)
  { 
    DA_Value=Read_Key();
    if(DA_Value<10)
       ZLG7290_Download(0,0,0,DA_Value);
    else if(DA_Value>=10&&DA_Value<100)
           {
             ZLG7290_Download(0,0,0,DA_Value%10);
             ZLG7290_Download(1,0,0,DA_Value/10);
            }
         else if(DA_Value>=100&&DA_Value<1000)
                {
                   ZLG7290_Download(0,0,0,DA_Value%10);
                   ZLG7290_Download(1,0,0,(DA_Value/10)%10);
                    ZLG7290_Download(2,0,0,DA_Value/100);
                 }
              else if(DA_Value>=1000&&DA_Value<10000)
                    {
                       ZLG7290_Download(0,0,0,DA_Value%10);
                       ZLG7290_Download(1,0,0,(DA_Value%100)/10);
                         ZLG7290_Download(2,0,0,(DA_Value/100)%10);
                         ZLG7290_Download(3,0,0,DA_Value/1000);
                     }  
    DA_Conver(DA_Value);
    Delay(500);
    z1=Tlc549();
    Num =z1*5000/255;      
    qian=Num/1000;         //转成BCD码
    bai =Num%1000/100;     //转成BCD码
    shi =Num%100/10;       //转成BCD码
    ge  =z1%10;            //转成BCD码
    Display(qian,bai,shi,ge); 
    Delay(3000);
  }
}

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -