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

📄 9.c

📁 AD667外围电路简单的12位高性能数模转换
💻 C
字号:
/*=======da5667按键显示=======*/
//8255cs接Y0,控制液晶的377的E接Y1,		 AD677的CS接Y7	A0(A0,A1)接P2.0;A1(A2,A3)接P2.1
#include <stdio.h>
#include<intrins.h>
#include<reg51.h>
#include<absacc.h>
//#define    uchar   unsigned  char
//#define    uint   unsigned  int
#define D8255  XBYTE[0x1C00] //8255状态/数据口地址
#define  D8255C  XBYTE[0x1800] //8255 PC口地址 
#define  Dlcd     XBYTE[0x2FFF]//显示的地址
#define  DDAH     XBYTE[0xFDFF]//  667的高4位地址
#define  DDAL     XBYTE[0xFEFF]// 667的低8位地址
//#define  DDA     XBYTE[0xEFFF]	//启动转换
unsigned int  y; 
sbit rs = P1^0;   //1=数据; 0=指令;
sbit rw = P1^1;   //1=读; 0=写;
sbit  e = P1^2;   //1=使能?
sbit  clk=P1^7;   //DA控制端
//sbit  da=P2^4;
unsigned int tab[]={0x0EE,0x0ED,0x0EB,0x0E7,0x0DE,0x0DD,0x0DB,0x0D7,0x0BE,0x0BD,
                    0x0BB,0x0B7,0x7E,0x7D,0x7B,0x77 };  /*键码表*/
unsigned char tab1[]={"1234567890ABCDEF"};           /*段码表*/
unsigned char tab2[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x00,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F};
unsigned char lt[]={0x7f,0x0bf,0x0df,0x0ef};  /*行扫描码*/
//*************************延时函数*********************************
void delay(unsigned char DelayTime)    //延时1ms*DelayTime
{unsigned int  j=0;
	for(;DelayTime>0;DelayTime--)
	{	for(j=0;j<125;j++)	
		{;}	
	}
}

/*---------------写指令------------------------*/
write_comm(unsigned char c) 
{ 
delay(2);
//e1=0;
rs=0;
rw=0;
XBYTE[0x2FFF]=c;
e=1; 
_nop_();
e=0;
}

/*------------------初始化-----------------*/
void init_lcd (void)
{

write_comm (0x30);  //基本指令集  
write_comm (0x01);  //清屏,地址指针指向00H
write_comm (0x06);  //光标的移动方向
write_comm (0x0c);  //开显示,关游标
}
/*------------------显示-----------------*/
void display(unsigned int i)         
{
delay(2);
rs=1;
rw=0;
XBYTE[0x2FFF]=tab1[i];
e=1;
_nop_();
e=0;
return;
}
/*------------------DA转换-----------------*/
void DA(unsigned int m)
{ 
DDAL=0xff&m;
DDAH=(0x0f00&m)>>8;
}
/*------------------功能键-----------------*/

void able(unsigned int c)
{
  if(c==0x7B)
  DA(y);
   
  }
/*------------------主函数-----------------*/
main()
{
          
 unsigned int i,j,a,b;
XBYTE[0x1C00]=0x81;
init_lcd ();
j=0;
	  
  for(;;)
   {
     for(XBYTE[0x1800]=0x0f; XBYTE[0x1800]==0x0f;);   /*行线输出低电平,并判断是否有键按下*/
     i=0;                       /*行计数器清零*/
     b=lt[i];                   /*取行扫描码*/
     do
       {
         XBYTE[0x1800]=b;                   /*送行扫描码到P1口*/
         a=XBYTE[0x1800];                   /*读入列值*/
         a=a&0x0f;               /*保留低4位*/
         if(a==0x0f)             /*如果该列没有键按下,则送出下一行扫描码*/
          {
           i++;
           if(i==4)i=0;
           b=lt[i];
           }
         }
       while(a==0x0f);           /*循环到该列有键按下为止*/
       b=b&0x0f0;                 /*取行扫描码的高4位*/
       b=b|a;                     /*合并成为按键的扫描码*/
       i=0;                       /*计数器清零*/	   
       for(; b!=tab[i]; i++);     /*在键值表中查找相应的键值*/	   
       delay(200);      /*延时,去抖动*/
	   if(j<3)
	   {j++;
       y=(y<<4)+tab2[i];
       display(i);                  /*显示段码*/       	   
       for(XBYTE[0x1800]=0x0f; XBYTE[0x1800]!=0x0f;); /*判断按键是否结束*/
       delay(300); }    /*延时*/
       able(tab[i]);
	   

     }
}

⌨️ 快捷键说明

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