键盘显示da好使的1.txt

来自「数控直流电源和变频电源程序在c环境下编译」· 文本 代码 · 共 174 行

TXT
174
字号
 #include<reg51.h>
#include <absacc.h>
#include <intrins.h>

#define  uchar unsigned char
#define uint unsigned int

sbit DIN=P1^0;		 //串行数据输入
sbit CLK=P1^2;		 //串行时钟
sbit LOAD=P1^1;		//显示数据锁存控制
sbit add=P0^3;	    //加键
sbit mov=P0^2;		//位移键
sbit enter=P0^1;	//确认键

sbit  AD_CS=P2^0;                                    //TLC1549片选信号
sbit  AD_IOCLOCK=P2^1;                       //TLC1549时钟信号
sbit  AD_DATAOUT=P2^2;                     //TLC1549数据输出信号

sbit  DA_CS=P2^3;                                    //TLC5615片选信号
sbit  DA_SCLK=P2^4;                       //TLC5615时钟信号
sbit  DA_DIN=P2^5;                         //TLC5615数据输出信号



/******************对7219的写字节程序******************/
//功能:实现对控制寄存器的读写;
//时序要求:MAX7219采用串行数据传输方式,由16位数据包发送到DIN引脚的串行数据在每个CLK的上升沿被移入内部
//的16位移位寄存器中,然后在LOAD的上升沿将数据锁存到数字或控制寄存器;LOAD信号必须在第十六个时钟上升沿同
//时或之后,但在下一个时钟上升沿变高,否则数据库丢失。
void SendChar (uchar ch)
{
  uchar i ,temp;
 _nop_();
 for(i=0;i<8;i++)
 { 
   temp=ch&0x80;
   ch=ch<<1;
   if (temp)
   {
    DIN=1;
    CLK=0;
    CLK=1;
   }
   else 
   {
    DIN=0;
    CLK=0;
    CLK=1;
   }
 }
}

/*****************7219写数字程序************************/
//功能:先写LED数字控制寄存器,再将要显示的字符送到相应的数字寄存器显示
void WriteWord (uchar addr,uchar num)
  {
  LOAD=0;
  _nop_();
  SendChar(addr);
  _nop_();
  SendChar(num);
  _nop_();
   LOAD=1;                              //锁存进相应寄存器
    }


/****************7219初始化程序**********************/
//功能:完成对各个内部寄存器的初始化
void Init_Max7219(void)      
{ 
 WriteWord (0x0b, 0x07);   //译码寄存器,写入0ffH,对0至7位均译码
 WriteWord (0x09, 0xff);   //亮度调节寄存器,写入03H,实现一般的亮度显示
 WriteWord (0x0a, 0x0a);   //扫描界限寄存器,写入03H,实现对0到7位数码管的显示 
 WriteWord (0x0c, 0x01);   //停机寄存器,写入01H,实现正常工作
 
}

/*延时t 毫秒*/
void delay (uint t)
{
  uint i;
  while (t--)
  { 
 /*对于12MHz时钟,约延时1ms*/
    for (i=0;i<125;i++)
     {}
  }
}



  uint da_convert(uint da_data_10bit)
{
   uchar i;
  uint DA_DATA=da_data_10bit<<6;


  DA_CS=0;
   for (i=0;i<=11;i++)
{
   DA_SCLK=0;
  if((DA_DATA&0x8000)==0x8000)
 {
    DA_DIN=1;
  }
  else
{
   DA_DIN=0;
 }
 DA_SCLK=1;
 DA_DATA=DA_DATA<<1;
}
 DA_SCLK=0;
 DA_CS=1;
return(DA_DATA);
} 






 void DACONVERT(uint da_data)
{   
    uint da_data_10bit;                               //10位输出的数据
 
   DA_CS=1;                                               //初始化TLC5615
   DA_SCLK=0;
   da_data_10bit=da_data;                       //输出的实际数据,对应模拟电压1.66
   
 
   da_convert( da_data_10bit);
  
 }









/*****************主程序******************/
//实现四个数码显示0123
void main()
{  uchar num[8]={0,0,0,0,0,0,0,0};
   uchar digit[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
   static i=3;
   static DA ,da_data;
  
    Init_Max7219();
      WriteWord (0x0f,0x01);     //开始显示测试,点亮所有LED
      delay (3000);                         //延时约3s
      WriteWord(0x0f,0x00);       //退出显示测试模式


while(1){


      delay(50); 
  if (add==0) {delay(50); if(add==0) {num[i]++;} if(num[i]>9) {num[i]=0;}}
  delay(50);
  if(mov==0) {delay(50); if(mov==0){i--;} if(i<0) {i=3;}}
  if(enter==0) {delay(50);  if(enter==0){DA=num[0]*1000+num[1]*100+num[2]*10+num[3];
                                           da_data=DA*0.08; DACONVERT(da_data); }}
  	 
      WriteWord(digit[i],num[i]);
   
   	
 
  }
  }

⌨️ 快捷键说明

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