今天用做了个小东西:数码管显示接近开关变化值接近开关通过外部中断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); }
上一篇:L297,L298驱动步进电机原理图proteus仿真+程序 LCD显示速度
下一篇:基于51单片机的波形发生器的设计
推荐阅读
史海拾趣
FerriShield公司起源于一家小型电子材料研究实验室。创始人Dr. Smith是一位材料科学家,他发现了一种新型的铁磁屏蔽材料,能够有效减少电子设备中的电磁干扰。这一发现引起了业界的广泛关注。Dr. Smith决定将其商业化,并创立了FerriShield公司。凭借这种创新材料,FerriShield在成立初期就获得了多项专利,并成功吸引了第一轮风险投资。
随着公司知名度的提升,安纳森也不可避免地遭遇了一些侵权问题。面对不法公司或机关声称其为安纳森半导体本身或正式授权单位的情况,安纳森迅速采取行动,通过法律手段维护自身的合法权益。同时,公司还加强了与用户的沟通和交流,及时澄清误会,确保用户能够购买到真正的安纳森产品。这一系列的应对措施不仅有效地维护了安纳森的品牌形象,也为其在市场中树立了良好的口碑。
在电子行业中,产业链上下游之间的合作至关重要。安纳森深知这一点,因此始终致力于与产业链上下游的企业建立紧密的合作关系。通过与晶圆厂家、IC设计企业等合作伙伴的深入合作,安纳森不仅获得了稳定的原材料供应和技术支持,还共同研发出了多款具有市场竞争力的新产品。这种合作共赢的发展模式不仅提升了整个产业链的竞争力,也为安纳森的长远发展注入了源源不断的动力。
这五个故事只是安纳森在电子行业发展中可能经历的一部分,实际上,其发展历程可能更加复杂和丰富。无论如何,安纳森凭借其创新的技术、全球化的视野、环保的理念、对侵权问题的积极应对以及产业链合作的深化,已经成为了电子行业中一颗璀璨的明星。
近年来,随着全球对环保问题的日益关注,Desco Tools公司也积极响应环保号召,将环保理念融入公司的生产和经营中。公司采用环保材料和工艺,减少生产过程中的废弃物和污染物排放。同时,公司还积极推动绿色生产和可持续发展,为客户提供更加环保、可持续的防静电解决方案。这些举措不仅有助于保护环境,还提升了公司的社会责任感和形象。
CWIND公司非常重视人才培养和团队建设。公司建立了完善的培训体系,为新员工提供全面的职业技能培训;同时,公司还鼓励员工参与各种技术交流和培训活动,提升自身的技术水平。在团队建设方面,CWIND注重营造积极向上的工作氛围和团队合作精神。通过定期举办团队建设活动和员工表彰大会等方式,公司成功打造了一支高效、协作、创新的团队。
随着信息技术的发展,对嵌入式系统的研究与开发也成为当前的一个热点。由于 -.机上应用的 /01占用资源太多,不适合嵌入式的应用,因此嵌入式系统对轻量级 /01 的需求越来越迫切。首先介绍了嵌入式系统及其相关概念,并针对图形用户界面在嵌入式系统 ...… 查看全部问答∨ |
|
本帖最后由 jameswangsynnex 于 2015-3-3 19:57 编辑 近年来,随着各种短距离无线通信技术的发展,人们提出了一个新的概念,即个人局域网PAN(Personal Area Network)。 PAN 核心思想是,用无线电或红外线或者蓝牙代替传统的有线电缆 ...… 查看全部问答∨ |
|
近日,天涯社区一名广州的网友“卖身找工作”,自称是仍然失业的应届毕业生,他结合眼下“被就业”“跨省追捕”等时兴话题及自 身的经历,以漫画“小强爬行记”道尽自己大学毕业以来就业路上的种种辛酸经历。他调侃自己为一只“踩不死的小强,就算 ...… 查看全部问答∨ |
|
= _T(\"searchlist.bat\"); //执行DOS命令 TCHAR szAppPath[MAX_PATH] = _T(\"\");& ...… 查看全部问答∨ |
|
现在有8个LED ,用51单片机的8个I/O控制,老大让闪烁200种模式 如果每种模式写一个函数实现,那就得200个函数,老大说200个函数太大了 他要像活字印刷那样,几个函数通过不同的组合就能实现这200种模式 唉,想得头都大了,不知道大家有没有什么 ...… 查看全部问答∨ |