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

📄 数显.c

📁 基于单片机的数控可调直流电源
💻 C
字号:
#include  "reg51.h" 
#include  "math.h"
#include  "intrins.h"  
#define   uint      unsigned int 
#define   uchar     unsigned char   
#define   led_sec   P1 
#define   dac_adr   0x7fff     //初始DAC0832的地址 
sbit      inc_key = P3^0;      //"+" 键 
sbit      dec_key = P3^1;    //"-" 键 
sbit      step_key = P3^2; 	   //调整键 
sbit      ten = P3^3;          //数码管的十位 
 
sbit      one = P3^4;  //数码管的个位 
sbit      point  = P3^5;   	   //数码管的小数位 
char xdata  dacreg  _at_  dac_adr;  //定义DAC0832的地址 
bit  flag0 = 0; 
uchar arry10[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 
uchar arry1[10] = { 0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10}; 
uchar arry0[10] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; 
//显示部分
uchar * ptr10 = arry10; 
uchar * ptr1 = arry1; 
uchar * ptr0 = arry0; 
void  ini_int(void) //中断初始化 
{ 
  inc_key = 1; 
  dec_key = 1; 
  EA = 1; 
  EX0 = 1; 
  IT0 = 1;  //边沿触发方式        
} 
//**************************delayfunction************************************ 
//延时动态扫描 


void  delay( uint count)  //延迟周期是 20us 
{ uint i,j;
  for (i=0;i<count;i++);
  for (j=0;j<240;j++);
} 
//**************************buffer************************************** 
//根据地址查表得出要显示的电压值 
void buffer(uchar led10,uchar led1,uchar led0) //缓冲区
{ 
  ten = 0; 
  led_sec = *(led10 + ptr10);        
  delay(500);        // 延迟 10ms 
  ten = 1; 
  one = 0; 
  led_sec = *(led1 + ptr1); 
  delay(500);      // 延迟 10ms
  one = 1; 
  point = 0; 
  led_sec = *(led0 + ptr0); 
  delay(500);      // 延迟 10ms
  point = 1; 
} 

//BCD码到十进制的转换 
void disp_out(unsigned char dat) 
{   
  uchar dig_10,dig_1,dig_0,temp,temp1; 
  temp = dat; 
  dig_10 = temp/100; 
  temp1 = temp%100; 
  dig_1 = temp1/10; 
  dig_0 = temp%10; 
  buffer(dig_10,dig_1,dig_0); 
} 
//**********************主程序*********************************** 
void  main() 
{  
  unsigned char dac_dat,dac_temp; 
  uchar    inc_key_temp = 1; 
  uchar    dec_key_temp = 1; 
  dac_dat = 0xd; 
  flag0 = 0;            // 初始化标志位 
  dac_temp = dac_dat; 
  dacreg = dac_temp;    //把输出电位至到 1.3V 
  ini_int();          //外部中断 
  disp_out(dac_temp); 
  while (1) //*~dec_key | ~inc_key*/
  {  
 
    if ( inc_key == 0 ) //判断有没有加键按下
      { 
        delay(600); 
        inc_key_temp = (inc_key == 0) ? 0 : 1; 
//按键释放前一直扫描显示,如果按键释放则跳出并 "+" 1 
       do 
          { 
            disp_out(dac_temp); 
          } 
        while (inc_key == 0); 
 



      } 
    else if( dec_key == 0 ) //判断有没有减键按下
      {  
        delay(600); 
        dec_key_temp = (dec_key == 0) ? 0 : 1; //按键释放前一直扫描显示,如果按键释放则跳出并 "-" 1 
        do 
          { 
            disp_out(dac_temp); 
          } 
        while (dec_key == 0); 
      } 
    else  
      { 
         ; 
      } 
         if ( ~flag0 & ~dec_key_temp & (dac_temp>13))       //步进减 0.1V
         {  
            dec_key_temp = 1; 
            dac_dat = dac_dat - 1; 
            dac_temp = dac_dat; 
            dacreg = dac_temp; 
            disp_out(dac_temp); 
         } 
         else if ( ~flag0 & ~inc_key_temp & (dac_dat<161)) // 步进加 0.1V 
         { 
            inc_key_temp = 1; 
            dac_dat = dac_dat + 1; 
    dac_temp = dac_dat; 
            dacreg = dac_temp; 
            disp_out(dac_temp); 
         } 
         else if ( flag0 & ~dec_key_temp & (dac_dat>23))  //步进减 1V 
         {   
    dec_key_temp = 1; 
            dac_dat = dac_dat - 10; 
    dac_temp = dac_dat; 
            dacreg = dac_temp; 
            disp_out(dac_temp); 
         } 
         else if (flag0 & ~inc_key_temp & (dac_dat<151))   // 步进加 1V 
         { 
            inc_key_temp = 1; 
    dac_dat = dac_dat + 10; 
    dac_temp = dac_dat; 
            dacreg = dac_temp; 
            disp_out(dac_temp); 
         } 
         else  
         { 
            disp_out(dac_temp); 
         } 
  }  


} 
//*************************中断************************** 
void int0(void) interrupt 0 using 1
{ 
  flag0 = ~flag0; 
} 

⌨️ 快捷键说明

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