历史上的今天
今天是: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); }
史海拾趣
|
单片机和PC上位机定好了协议,然后我这里是单片机接收PC的数据,根据协议是一个一个数据包处理的。 以前没怎么编过这方面的程序,还请各位帮帮忙…… 具体协议: 1. PC给MCU发: 帧头:0xff + 卡号(1BYTE)0x_ _ + 时(1BYTE):0x_ _ + 分(1BYT ...… 查看全部问答> |
|
大家好,来咱论坛有一阵子了,这是我头一次发贴,我是WINCE的新手,问的问题很初级幼稚,希望大家能给点帮助,有时你们的一句话,就会让我受益良多!谢谢!我现在正在做一个医疗器械的项目要用到WINCE 4.2系统,我现在在定制所需的系统,以及要解决 ...… 查看全部问答> |
|
对于现在的大学课程,往往把单片机这门课排到第三甚至是第四学年才开始学。我个人感觉是学得太晚了,全国大学生电子设计竞赛肯定是与你无缘了,大学里没张过硬的招牌毕业后找工作你能信心十足?显然在当今竞争激烈的社会是不可能的。 ...… 查看全部问答> |
|
帮忙看下一段程序,就是将0200H~05FFH的RAM清除!对不对! 帮忙看下一段程序,就是将0200H~05FFH的RAM清除!这样写对不对,因为感觉应该是写字的,Address每次是不是应该+2啊? unsigned int *ptr; unsigned int Address; Address=0x200;   ...… 查看全部问答> |
|
中间那条线上信号的方向是由从机到主机,是说明从机控制主机的UCxSTE位吗? 可是我觉得应该是人为的在程序中决定主机工作还是不工作,有点糊涂,请高手讲一下 … 查看全部问答> |
|
基于单片机的射频读卡系统怎么做啊,最好是stc89c52的单片机,想要具体过程,电路图和代码。。。protues软件不会做读卡的仿真啊,也不会模拟读卡的过程,只需要读卡,需要有存储功能。。。刷卡的时候能显示出信息。。。。求大神!!!!!!!!… 查看全部问答> |
|
“有时跟抢钱似的,”谈及医疗器械行业的利润,北京泰杰磁电研究所所长王晓庆这样告诉EEWORLD,在其他领域很少有价值十几亿元人民币的单件产品,但在医疗器械领域却存在着。而医疗器械行业的高利润,早已是公开的秘密。在金融危机中,如果说要寻找 ...… 查看全部问答> |




