• 大小: 5KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-05-24
  • 语言: 其他
  • 标签: C51  

资源简介

51单片机血压计程序,stc89c52,程序,计数,便于放气速度设置,由D/A输出来控制放气速度

资源截图

代码片段和文件信息

#include 
#include 
#define  DAC_1    XBYTE[0x2000]
#define  DAC_2    XBYTE[0x4000]  
#define  ADC_0    XBYTE[0x6000]
#define  ADC_1    XBYTE[0x6001]
#define  ADC_2    XBYTE[0x6002]
#define  ADC_3    XBYTE[0x6003]
#define  ADC_4    XBYTE[0x6004]
#define  ADC_5    XBYTE[0x6005]
#define  ADC_6    XBYTE[0x6006]
#define  ADC_7    XBYTE[0x6007]
unsigned char        dspbuf[4]={0xef0xef0xef0xef}sel=0key_sta=0key_num;
unsigned int         adcount=0;
sbit D_SER= P1^0;
sbit D_SRCLK= P1^1;
sbit D_RCLK= P1^2;
sbit KEY1= P3^4;
sbit KEY2= P3^5;//定时器初始化:
void init_timer0(void) 
  {
  TMOD =0X22;         //定时器0以方式2(自动重新装载8位计数器)自动计数
  TL0 = 0X06;
  TH0 = 0X06;                 //至初始值为6,每0.25ms进入一次中断
  TL1 = 0Xe8;
  TH1 = 0Xe8;
  TR0 = 1;
  TR1 = 1;
  ET0 = 1;
}
//中断设置:
void init_special_interrupts(void) 
  {  
  EX0 = 0;
  ET0 = 1;
  EX1 = 0;
  ET1 = 0;
  ES  = 1;
  EA  = 1;
  PT0 = 0;
  PX1 = 1;
PS  = 0;
SCON=0x50;   //串行口方式1工作
}
//数码管显示:
void dsptask()
  {
  unsigned char i;
  unsigned char ab;
  switch(sel)
   {
   case 0: a=0x01;  break;
   case 1: a=0x02;  break;
   case 2: a=0x04;  break;
   default: a=0x08;
   }
for(b=0x80i=0;i<8;i++)
    {
    if(a&b)  D_SER=1;
    else     D_SER=0;
    D_SRCLK=0;
    D_SRCLK=1;
    D_SRCLK=0;
    b=b>>1; b=b&0x7f;
    }
  a=dspbuf[sel];
  key_num=sel;
  sel++;
  if(sel>=4) sel=0;
  for(b=0x80i=0;i<8;i++)
    {
    if(a&b)  D_SER=1;
    else     D_SER=0;
    D_SRCLK=0;
    D_SRCLK=1;
    D_SRCLK=0;
    b=b>>1;  b=b&0x7fff;
    }
  D_RCLK=0;
  D_RCLK=1;
  D_RCLK=0;
  }
//键盘扫描:                        //键盘值为1~8
void key_service()
  {
  if(key_sta&0x01) return;             // key_sta.0=1
   if(KEY2)
   {
    key_num=key_num+1;                    
key_sta=key_sta|0x01;              // 置key_sta.0=1
}
   else if(KEY1)
       {
       key_num=key_num+5;   
          key_sta=key_sta|0x01;        // 置key_sta.0=1
       }
  }//定时器0中断处理:
void timer_isr() interrupt 1  {
  EA=0;
  adcount++;                        //计数,便于放气速度设置
  key_service();                      //键盘扫描
  EA=1;
  }
//扫描字显示转化:
fdisp(unsigned char nunsigned char m)      //将需要显示的数转化成相应的显示码
  {
  char  c;
   switch(n)
    {
    case 0:  c=0x11;  break;
    case 1:  c=0x7d;  break;
    case 2:  c=0x23;  break;
    case 3:  c=0x29;  break;
    case 4:  c=0x4d;  break;
    case 5:  c=0x89;  break;
    case 6:  c=0x81;  break;
    case 7:  c=0x3d;  break;
    case 8:  c=0x01;  break;
    default: c=0x09; 
    }
   dspbuf[m]=c;
  }
//主函数:
void main(void) 
{
float m

评论

共有 条评论