×
单片机 > 单片机程序设计 > 详情

接近开关的51单片机驱动程序

发布时间:2020-06-17 发布时间:
|

今天用做了个小东西:数码管显示接近开关变化值接近开关通过外部中断0连接单片机;数码管示数增加到50后清零;


#include              // 引用标准库的头文件

#include

#define uchar unsigned char

#define uint unsigned int


#define NoOp   0x00             // 空操作寄存器 

#define Digit0 0x01             // 数码管1寄存器 

#define Digit1 0x02             // 数码管2寄存器 

#define Digit2 0x03              // 数码管3寄存器  

#define Digit3 0x04             // 数码管4寄存器  

#define Digit4 0x05             // 数码管5寄存器  

#define Digit5 0x06             // 数码管6寄存器  

#define Digit6 0x07             // 数码管7寄存器  

#define Digit7 0x08             // 数码管8寄存器  

#define DecodeMode 0x09            // 译码模式寄存器  

#define Intensity 0x0a                 // 亮度寄存器  

#define ScanLimit 0x0b              // 扫描位数寄存器 

#define ShutDown 0x0c               // 低功耗模式寄存器

#define DisplayTest 0x0f            // 显示测试寄存器

#define ShutdownMode 0x00            // 低功耗方式  

#define NormalOperation 0x01         // 正常操作方式 

#define ScanDigit 0x07                 // 扫描位数设置,显示8位数码管

#define DecodeDigit 0xff           // 译码设置,8位均为BCD码

#define IntensityGrade 0x0a          // 亮度级别设置 

#define TestMode 0x01                  // 显示测试模式,

#define TextEnd 0x00                   // 显示测试结束,恢复正常工作模式



sbit DIN = P0^3;                    // 串行数据输入


sbit CLK = P0^4;                    // 串行时钟


sbit LOAD = P0^5;                   // 显示数据锁存控制





uchar DisBuffer[8]={0,0,0,0,0,0,0,0};    // 显示缓存区0x06

uchar a[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09};


uchar num11;


/* 延时t毫秒 */


void delay(uint a)


{uchar x,y;

  for(x=a;x>0;x--)

  for(y=110;y>0;y--);



/* 向MAX7219写入字节(8位)*/


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;


        }


    }


}




/* 向MAX7219写入字(16位)*/


void WriteWord (uchar addr,uchar num)


{


    LOAD=0;


    _nop_();


    SendChar(addr);


    _nop_();


    SendChar(num);


    _nop_();


    LOAD=1;                            // 锁存进相应寄存器


}




/* MAX7219初始化 */


void InitDisplay (void)


{


    WriteWord (ScanLimit,ScanDigit);         // 设置扫描界限


    WriteWord (DecodeMode,DecodeDigit);      // 设置译码模式


    WriteWord (Intensity,IntensityGrade);    // 设置亮度


    WriteWord (ShutDown,NormalOperation);    // 设置为正常工作模式


}


// show




// 外部中断0

void show1(uchar dat)

{uchar shi,ge;

shi=dat/10;

ge=dat%10;

delay(1);

WriteWord (Digit6,a[ge]);

WriteWord (Digit7,a[shi]);


}






/* 主函数 */

void main(void)


{


     InitDisplay ();                                              // MAX7219初始化

         


         IE=0x81;

         IT0=1;


      show1(0);

          WriteWord (Digit1,0xff);

          WriteWord (Digit0,0xff);

      WriteWord (Digit2,0xff);

          WriteWord (Digit3,0xff);

          WriteWord (Digit4,0xff);

          WriteWord (Digit5,0xff);

while(1)


{

        if(num11==50)

    num11=0;


    show1(num11);


}

}



void exint0(void)interrupt 0

{

num11++;


InitDisplay();

delay(1);

show1(num11);

delay(1);


}


关键字:接近开关  51单片机  驱动程序 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多