历史上的今天
返回首页

历史上的今天

今天是:2024年11月16日(星期六)

2019年11月16日 | 接近开关的51单片机驱动程序

2019-11-16 来源:51hei

今天用做了个小东西:数码管显示接近开关变化值接近开关通过外部中断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);


}


推荐阅读

史海拾趣

Electroswitch公司的发展小趣事

随着市场竞争的加剧,Electroswitch意识到仅仅依靠产品质量已经不足以赢得市场。因此,公司开始注重提升服务质量,为客户提供更加全面和专业的支持。通过加强售前咨询、售后服务以及技术支持等方面的投入,Electroswitch成功赢得了客户的信任和忠诚。这也使得公司在电子行业中的地位得到了进一步提升。

Astema公司的发展小趣事

随着公司规模的扩大,Astema开始关注可持续发展和社会责任。公司致力于推动绿色生产,减少对环境的影响。同时,Astema还积极参与社会公益活动,回馈社会。这些举措不仅提升了公司的社会形象,还为公司的长期发展注入了新的动力。

以上这些故事只是模拟Astema公司可能的发展路径和挑战,并非真实情况。真实的电子行业公司发展历程往往更加复杂和多元,需要综合考虑多种因素。如果您对Astema公司的真实发展情况感兴趣,建议查阅相关的行业报告、公司年报或新闻报道等。

EVERLIGHT公司的发展小趣事

面对未来,EVERLIGHT有着明确的发展规划。公司将继续加大研发投入,不断推出创新型的LED产品和技术解决方案。同时,公司还将加强与国际知名品牌的合作,拓展更广阔的市场空间。此外,EVERLIGHT还将积极应对市场变化和竞争挑战,不断提升自身的核心竞争力和市场影响力。在未来的发展中,EVERLIGHT将继续秉持创新、品质、环保的理念,为电子行业的发展做出更大的贡献。

A/D Electronics Inc公司的发展小趣事

在快速发展的过程中,A/D Electronics Inc始终坚守品质至上的原则。公司建立了严格的质量管理体系,从原材料采购到产品生产、检验、出货等各个环节都严格把关。此外,公司还不断引入先进的生产设备和工艺,提高生产效率和产品质量。通过持续改进和创新,A/D Electronics Inc在激烈的市场竞争中始终保持领先地位。

Eutech公司的发展小趣事

在全球化的浪潮下,EUtech公司积极寻求国际合作。他们与德国的氢探新能源公司建立了长期稳定的合作关系,共同研发燃料电池系统控制技术。通过共享资源、互补优势,双方不仅提高了产品的竞争力,还推动了整个行业的技术进步。

Delta Electronics公司的发展小趣事

Delta Electronics在电源管理技术方面一直处于行业领先地位。公司不断投入研发资源,推动电源技术的创新和进步。其中,Delta开发的高效率开关式电源供应器,以其高效、稳定和可靠的性能,赢得了全球客户的广泛认可。此外,公司还积极推广绿色能源和节能技术,为客户提供环保、节能的电源解决方案。

问答坊 | AI 解惑

根据协议编写单片机串口程序的问题

单片机和PC上位机定好了协议,然后我这里是单片机接收PC的数据,根据协议是一个一个数据包处理的。 以前没怎么编过这方面的程序,还请各位帮帮忙…… 具体协议: 1. PC给MCU发: 帧头:0xff + 卡号(1BYTE)0x_ _ + 时(1BYTE):0x_ _ + 分(1BYT ...…

查看全部问答>

关于USB组件定制及USB PCI打印机问题

大家好,来咱论坛有一阵子了,这是我头一次发贴,我是WINCE的新手,问的问题很初级幼稚,希望大家能给点帮助,有时你们的一句话,就会让我受益良多!谢谢!我现在正在做一个医疗器械的项目要用到WINCE 4.2系统,我现在在定制所需的系统,以及要解决 ...…

查看全部问答>

at89s52与at89c51

我想把c51的程序移植到s52上,需要注意什么问题呢,我仿真了一下,发现定时器0的中断貌似已经不能用了………

查看全部问答>

单片机—要重视它,要趁早学!

    对于现在的大学课程,往往把单片机这门课排到第三甚至是第四学年才开始学。我个人感觉是学得太晚了,全国大学生电子设计竞赛肯定是与你无缘了,大学里没张过硬的招牌毕业后找工作你能信心十足?显然在当今竞争激烈的社会是不可能的。 ...…

查看全部问答>

STM32 CAN 口

为工作需要,主要学习STM 32上的CAN功能 请问大家,买哪种开发板好  …

查看全部问答>

帮忙看下一段程序,就是将0200H~05FFH的RAM清除!对不对!

 帮忙看下一段程序,就是将0200H~05FFH的RAM清除!这样写对不对,因为感觉应该是写字的,Address每次是不是应该+2啊?   unsigned int *ptr;  unsigned int Address;    Address=0x200;     ...…

查看全部问答>

5438中关于SPI的问题

中间那条线上信号的方向是由从机到主机,是说明从机控制主机的UCxSTE位吗? 可是我觉得应该是人为的在程序中决定主机工作还是不工作,有点糊涂,请高手讲一下  …

查看全部问答>

基于单片机的射频读卡系统怎么做啊

基于单片机的射频读卡系统怎么做啊,最好是stc89c52的单片机,想要具体过程,电路图和代码。。。protues软件不会做读卡的仿真啊,也不会模拟读卡的过程,只需要读卡,需要有存储功能。。。刷卡的时候能显示出信息。。。。求大神!!!!!!!!…

查看全部问答>

医疗电子,梦想与现实的巨大鸿沟?

“有时跟抢钱似的,”谈及医疗器械行业的利润,北京泰杰磁电研究所所长王晓庆这样告诉EEWORLD,在其他领域很少有价值十几亿元人民币的单件产品,但在医疗器械领域却存在着。而医疗器械行业的高利润,早已是公开的秘密。在金融危机中,如果说要寻找 ...…

查看全部问答>

会要用到瑞萨的产品吗

13年要用瑞萨的芯片,可是平时就没用过,好担心今年又是指定芯片。。。 …

查看全部问答>