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

📄 119cpld.c

📁 单片机与cpld总线方式通信
💻 C
字号:
#include<reg51.h>
#include<absacc.h>
#include <intrins.h> 
#define unchar unsigned char
#define unint unsigned int
#define DisCmd XBYTE [0xC100]                     //7218控制字地址
#define DisData XBYTE [0xC000]                    //7218数据口地址
#define scode 0xb0                                //7218软件译码方式命令字
#define bcode 0x90                                //B码译码方式命令字
#define hexcode 0xd0                              //软件译码方式命令字
#define unchar  unsigned char 
//MAX191工作在ROM Mode 方式 
//对外中断1采用了查询方式,中断方式还得再试验
//12位AD精度有了,可是速度是一个问题,
//按现在的用法,转换时间为12uS,再算上数据处理时间(包括数据存储、显示等),对模拟信号的采样频率估计最快也就是
//几十KHz(只考虑转换时间和存储在RAM中所需时间)
sbit P3_3=P3^3;
unchar xdata *AD;
unint voltage;
unchar keynum;
unchar flag=0;
unchar dot;
char distab[8]={0x13,0x13,0x14,0x00,0x12,0x12,0x0e,0x11} ; // 要显示的内容 hello-pp
char code ledtab[]={ 0xfb,0xb0,0xed,0xf5,0xb6,0xd7,0xdf,0xf0,
               //0,   1,    2,   3,   4,   5,   6,   7 
                0xff,0xf7,0xfe,0x9f,0xcb,0xbd,0xcf,0xce,
               //8    ,9   ,a   ,b   ,c    ,d  ,e    ,f  
                0x80,0xbe,0x8b,0xee,0x84 };
               //熄灭 H    L    P    -
void delay1s()
{
 unint i,j;
 for(i=100;i>0;i--)
 for(j=500;j>0;j--);
 }

void display()
{
   unchar i;      
   DisCmd=scode;            //采用软件译码
   for(i=0;i<8;i++)      //将distab中的数据送如7218
   {
  DisData=ledtab[distab[i]]; //查表转化并将字型送入7218
 }
//for(i=1000;i>0;i--);   
}
 ADStart()
 {
  unchar d_h,d_l;
  
  //AD=0xA000;
  //a=*AD; //WR下跳沿启动
  //_nop_();
  //while(P3_3==1);
   AD=0xA100;
   d_h=(*AD)&0x0f;
   AD=0xA000;
   d_l=*AD;
  voltage=d_h*0x0100+d_l;
  distab[3]=voltage/1000;
  distab[3]=distab[3];
  voltage=voltage%1000;
  distab[2]=voltage/100;
  voltage=voltage%100;
  distab[1]=voltage/10;
  voltage=voltage%10;
  distab[0]=voltage;
 // distab[7]=0x10;
  distab[6]=0x10;
  distab[5]=0x10;
  distab[4]=0x10;
  display();
  delay1s();
 }
//**************************************************************************************
void intt0() interrupt 0 
{ 
 EX0=0;              //关键盘中断,禁止相应其他按键
 keynum=P1;          //从p1口读入键盘值
 keynum=keynum&0x0f; //取低四位;
 if(keynum==0x0f)
 flag=!flag;
 if(flag)
 distab[7]=0x00;
 else
 distab[7]=0x13;
 display();
 EX0=1;                    //开中断
}
//**************************************************************************************
/*
void intt1() interrupt 1   //AD转换中断
{ 
 ADStart();
}
*/
void main()
{

  //unchar n;
  EX0=1;
  //EX1=1;
  EA=1;
  dot=3;
  //for(n=0;n<8;n++)
  //distab[n]=n;
  display();
  while(1)
  { 
  if(flag)
  ADStart();
  }
}

⌨️ 快捷键说明

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