单片机

阅读 / 问答 / 标签

51单片机数码管显示电路图

用数码管做静态显示的话,用74HC595比较好这是一个串入并出的移位芯片,具有三态缓冲功能,且占用IO口少

求比较好的单片机学习网站啊

多了去了,大虾电子网(http://www.daxia.com)51单片机学习网(http://www.51c51.com)平凡单片机工作室(http://www.mcustudio.com)中国电子开发网(http://www.ourdev.cn/)网上一搜多了去了,找一个自己合适的。我经常看中国电子开发网。

谁能提供一下51单片机好的网址和技术论坛

在 TopSemic 有半导体行业常用的网址,包括论坛。

stc89c52单片机和51单片机的区别

重要的几点是:能用串口写程序,简单 便宜有XDATA和EEPROM详细的,你去STC-MCU.COM下载它的文档,就知道了。

51单片机设计电子琴课程设计

我有个基于单片机的简易电子琴设计的资料~~~如果你要的话就HI我把邮箱地址留下~~到时候给你发过去~!

51单片机这个德飞莱什么垃圾论坛啊?新人注册什么权限都没有,连看帖权限都没有,怎么升级?

德飞莱那个论坛比较水放弃吧。开源电子网有51单片机版块。但是开源电子网是专注于STM32和ARM技术的,我没试过51版块怎么样,你可以去看看。

谁知道在这个网站http://www.51c51.com/DIY/diy51/diy51.htm上的51单片机编程器的电路图是否是正确的?

网站是深圳学林电子的,电路是正确的,但是制作完了你还要给监控芯片烧写监控程序,没有烧写器的话还是制作不了的。因为除了待烧写的51单片机外还有一个用作控制下载烧写程序的51单片机。如果你使用AT89S5X系列单片机来学习的话,建议采用并口ISP下载,你的电脑不会就有串口吧。

51单片机学习网站6个以上 要求:网站页面广告要少

电子发烧友 http://bbs.elecfans.com/单片机教程网http://www.51hei.com/再针对性要求,请XXXXX百度一下

求好的51单片机学习网站

我的博客上有很多实用的链接,你可以去看看.

如何实现labview和单片机的wifi通信

Lv安装于上位机,单片机是下位机你的问题就变成上位机如何与下位机通讯。上位机是电脑,下位机是单片机,他们直接要通讯首先要有硬件支持,Wifi的硬件。这样下位机自然需要无线芯片,上位机自然要无线网卡连上后无线通信就变成了TCP通信。TCP通信labview里有工具包,有例程,问题便解决了。

请教有AI89C51单片机的数字时钟的设计电路和程序,高分悬赏,邮箱13980836483@qq.com

高分为多少分,这个题目我帮别人做过,程序、PROTEUS仿真都有!

单片机这段LED动态显示的代码要怎么理解?

j++的目的就是每一次定时器溢出约1mS刷新一次数码管,6次刷新一遍,当溢出1000次后,数码管显示的数字加1。对10求模求余就是分离出个十 百千万。

大神在吗,求详细注释你之前给的单片机程序啊,尽量详细啊,帮帮忙,急用啊

不是自己写的吗我可以i写

单片机中独立键盘和矩阵键盘如何一起使用 请用C语言写个程序说明,谢谢。

#include<reg52.h>#define uchar unsigned char#define uint unsigned intsbit du = P2^6;sbit we = P2^7;sbit s2 = P3^0;sbit s3 = P3^1;sbit s4 = P3^2;sbit s5 = P3^3;sbit led1 = P1^0;uchar code t[]={0x3F, //"0"0x06, //"1"0x5B, //"2"0x4F, //"3"0x66, //"4"0x6D, //"5"0x7D, //"6"0x07, //"7"0x7F, //"8"0x6F, //"9"0x77, //"A"0x7C, //"B"0x39, //"C"0x5E, //"D"0x79, //"E"0x71, //"F"0x76, //"H"0x38, //"L"0x37, //"n"0x3E, //"u"0x73, //"P"0x5C, //"o"0x40, //"-"0x00, //熄灭0x00 //自定义};void delay(uint z){uint x,y;for(x = z; x > 0; x--)for(y = 114; y > 0 ; y--);}uchar keyscan(){uchar cord_l,cord_h;P3 = 0xf0;if((P3 & 0xf0) != 0xf0){delay(5);if((P3 & 0xf0) != 0xf0){cord_l = P3 & 0xf0;P3 = cord_l | 0x0f;cord_h = P3 & 0x0f;while((P3 & 0x0f) != 0x0f);P3 = 0xff;return(cord_l + cord_h);}}}void keypro(){switch (keyscan()){case 0xee: P1 = t[1]; break;case 0xde: P1 = t[2]; break;case 0xbe: P1 = t[3]; break;case 0x7e: P1 = t[4]; break;case 0xed: P1 = t[5]; break;case 0xdd: P1 = t[6]; break;case 0xbd: P1 = t[7]; break;case 0x7d: P1 = t[8]; break;case 0xeb: P1 = t[9]; break;case 0xdb: P1 = t[10]; break;case 0xbb: P1 = t[11]; break;case 0x7b: P1 = t[12]; break;case 0xe7: P1 = t[13]; break;case 0xd7: P1 = t[14]; break;case 0xb7: P1 = t[15]; break;case 0x77: P1 = t[16]; break;}}void alonekey(){P3 = 0xff;if(s2 == 0){delay(5);if(s2 == 0){led1 = 0;}while(!s2);}}void main(){while(1){keypro();alonekey();}}我的也是同一个P3口

单片机AT89C51矩阵键盘C语言程序

只要按键程序,不需要显示?

求简单的51系列单片机控制4*4矩阵键盘显示电路图 带上程序

看看:http://hi.baidu.com/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/ac1d2663581b3bc9e6113a41.html

求89S52单片机汇编指令表

51单片机汇编指令表 8051 INSTRUCTION SET1.Arithmetic operations:指令用法 字节数 机器周期数ADD A,@Ri 1 1ADD A,Rn 1 1ADD A,direct 2 1ADD A,#data 2 1ADDC A,@Ri 1 1ADDC A,Rn 1 1ADDC A,direct 2 1ADDC A,#data 2 1SUBB A,@Ri 1 1SUBB A,Rn 1 1SUBB A,direct 2 1SUBB A,#data 2 1INC A 1 1INC @Ri 1 1INC Rn 1 1INC DPTR 1 1INC direct 2 1INC direct 2 1DEC A 1 1DEC @Ri 1 1DEC Rn 1 1DEC direct 2 1MUL AB 1 4DIV AB 1 4DA A 1 12.Logical opreations:ANL A,@Ri 1 1XRL A,@Ri 1 1ANL A,Rn 1 1XRL A,Rn 1 1ANL A,direct 2 1XRL A,direct 2 1ANL A,#data 2 1XRL A,#data 2 1ANL direct,A 2 1XRL direct,A 2 1ANL direct,#data 3 2XRL direct,#data 3 2ORL A,@Ri 1 1CLR A 1 1ORL A,Rn 1 1CPL A 1 1ORL A,direct 2 1RL A 1 1ORL A,#data 2 1RLC A 1 1ORL direct,A 2 1RR A 1 1ORL direct,#data 3 2RRC A 1 1SWAP A 1 13.Data transfer:Mnemonic Byte CycMOV A,@Ri 1 1MOV DPTR,#data16 3 2MOV A,Rn 1 1MOVC A,@A+DPTR 1 2MOV A,direct 2 1MOVC A,@A+PC 1 2MOV A,#data 2 1MOVX A,@Ri 1 2MOV @Ri,A 1 1MOVX A,@DPTR 1 2MOV @Ri,direct 2 2MOVX @Ri,A 1 2MOV @Ri,#data 2 1MOVX @DPTR,A 1 2MOV Rn,A 1 1PUSH direct 2 2MOV Rn,direct 2 2POP direct 2 2MOV Rn,#data 2 1XCH A,@Ri 1 1MOV direct,A 2 1XCH A,Rn 1 1MOV direct,@Ri 2 2XCH A,direct 2 1MOV direct,Rn 2 2XCHD A,@Ri 1 1MOV direct,direct 3 2MOV direct,#data 3 24.Boolean variable manipulation:Mnemonic Byte CycCLR C 1 1 ANL C,bit 2 2SETB C 1 1ANL C,/bit 2 2CPL C 1 1ORL C,bit 2 2CLR bit 2 1ORL C,/bit 2 2SETB bit 2 1MOV C,bit 2 1CPL bit 2 1MOV bit,C 2 25.Program and machine control:Mnemonic Byte CycNOP 1 1JZ rel 2 2RET 1 2JNZ rel 2 2RETI 1 2JC rel 2 2ACALL addr11 2 2JNC rel 2 2AJMP addr11 2 2JB bit,rel 3 2LCALL addr16 3 2JNB bit,rel 3 2LJMP addr16 3 2JBC bit,rel 3 2SJMP rel 2 2CJNE A,direct,rel 3 2JMP @A+DPTR 1 2CJNE A,#data,rel 3 2DJNZ Rn,rel 2 2CJNE @Ri,#data,rel 3 2DJNZ direct,rel 3 2CJNE Rn,#data,rel3 2

c语言控制单片机p1口跟随p0口状态输出,po口是ad转换来的,p0口我也加上拉电阻了,但是p1口输出不跟随

P0=P1;换为P1=P0;

单片机的P0口有的还标有AD是什么意思啊

PO口的第二功能有AD转换功能

adc0809的clk可以直接用单片机控制吗?

http://www.willar.com/forum/forum_view.asp?view_id=9701

单片机c程序设计中 ~CLK代表什么?

CLK应该是为变量,当T0中断时取反一次。

单片机中CLK和SCLK有什么区别?希望能详细回答---

一般来说,CLK是单片机的时钟,SCLK是SPI或者I2C的时钟,这个要具体看单片机的型号和方式

单片机c程序设计中 ~CLK代表什么?

CLK应该是为变量,当T0中断时取反一次。再看看别人怎么说的。

单片机中有一元件引脚上标注为“CLK”请问这个CLK是什么意思???

时钟信号

在proteus上仿真时给单片机任一端口输入一脉冲pulse是什么意思?

应该就是在那个端口拉高然后拉低或者拉低再拉高吧, 下降沿或者上升沿

求救,为什么PC与单片机通讯是一直提示The port is closed

电脑串行通讯口没打开

单片机fig是什么意思

图形。根据查询官方信息得知单片机fig是fig是FIGure的缩写。解释为图形时的信息。单片机Single-ChipMicrocomputer是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统。

单片机的外部晶振电路是怎么回事,如何计算所选电容的

晶振起振后的频率准确与否,和选取的C1,C2是否与晶振规格要求的负载电容要求相吻合有直接关系,计算公式如下:CL=C1*C2/(C1+C2)+5pF;算出的CL值要与晶振规格要求的负载电容尽量接近才能获得晶振的标称频率的振荡频率.一般电容的计算公式是:两边电容为Cg,Cd,负载电容为Clcl=cg*cd/(cg+cd)+a 就是说负载电容15pf的话,两边个接27pf的差不多了,一般a为6.5~13.5pF

如何选择合适的单片机晶振电容

稳定,漏电少

51单片机时钟程序设计

这样不太好吧!

一个单片机lcd1602的问题。

最好把电路图截图看下,

单片机中DCH是什么

0 1 2 3 4 5 6 7 8 9 A B C D E F 16个代码 16进制DCH 13*16+12*1

51单片机声控灯,怎么改下列代码使在分贝超过一定值的时候LED灯亮?

你好!你的程序不全,缺少 #include"XPT2046.h" 头文件

怎样用51单片机和led8*8矩阵进行字符汉字显示?

function-prototype是什么意思啊单片机

function-prototype意思是函数原型,一个构造函数的prototype属性,就是这个构造函数制造(即new)的实例的原型对象单片机(Single-Chip Microcomputer)是一种集成电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O口和中断系统、定时器/计数器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电路)集成到一块硅片上构成的一个小而完善的微型计算机系统,在工业控制领域广泛应用。从上世纪80年代,由当时的4位、8位单片机,发展到现在的300M的高速单片机。

单片机中require ANSI- style prototype是什么意思?

需要要把调用的子函数放到main前面,或者在main函数前面先把需要调用的子函数定义声明一下。requires ANSI-style prototype的意思是:需要ANSI样式原型。扩展资料单片机汇编指令是为解决某些特定的问题代码中必须嵌入汇编语言以代替C语言完成的单片机的编程,汇编语言对于程序调试是不可或缺的。它包括:算术操作类指令,布尔变量操作类指令,逻辑操作数指令,控制转移类指令。直接使用汇编指令编写单片机程序,对硬件的控制更加直接,可以直接操作物理地址,寄存器,端口等;其它更高级的语言对硬件的控制是依赖于类库来实现的。对于一些对程序大小和运行速度有非常严苛要求的项目,都必须使用汇编指令。C语言只是为了方便编写,与机器打交道的都是2进制代码。参考资料来源:百度百科-单片机参考资料来源:百度百科-汇编语言参考资料来源:百度百科-单片机汇编指令

MCS-51单片机汇编语言中func是什么

不硌这个func用在哪里?贴上有关func的代码

单片机的 分类

有很多种分类方法,如:按总线宽度分:8位,16位,32位等又有,总线型和非总线型;

朋友们帮忙写个51单片机的按键小程序?汇编的

高手

写了个单片机矩阵按键控制数码管显示数字的程序,只需要显示0到9就好了。但是自己写的调不出来,谢谢帮忙

void keyscan(){ P2=0xfe; temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xee:num=0; break; case 0xde:num=1; break; case 0xbe:num=2; break; case 0x7e:num=3; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } flag=flag+1; } } P2=0xfd; temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xed:num=4; break; case 0xdd:num=5; break; case 0xbd:num=6; break; case 0x7d:num=7; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } flag=flag+1; } }P2=0xfb; temp=P2; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P2; temp=temp&0xf0; while(temp!=0xf0) { temp=P2; switch(temp) { case 0xeb:num=8; break; case 0xdb:num=9; break; case 0xbb:num=10; break; case 0x7b:num=11; break; } while(temp!=0xf0) { temp=P2; temp=temp&0xf0; } flag=flag+1; } }P1=0xf7; temp=P1; temp=temp&0xf0; while(temp!=0xf0) { delay(5); temp=P1; temp=temp&0xf0; while(temp!=0xf0) { temp=P1; switch(temp) { case 0xe7:num=12; break; case 0xd7:num=13; break; case 0xb7:num=14; break; case 0x77:num=15; break; } while(temp!=0xf0) { temp=P1; temp=temp&0xf0; } flag=flag+1; } } } 这是键扫程序,肯定有用的

.c和.hex文件是要一起刷入单片机吗?他们有什么区别?不会的别答

.c当然是不能刷入单片机的,.hex文件下载到单片机,那么单片机就可以工作了。前者是源代码文件,必须经过编译、连接后产生.hex或.bin文件才可以下载到单片机。后者是最终生成的文件,单片机的.hex就相当于电脑的.exe

如何打开hex文件/从单片机里读程序

1、下载线和下载软件只用于将PC机上生成的HEX文件下载写入到单片机的程序存储器中,常用的这类软件一般都是单向的,从单片机读回程序代码的软件印象里好像见过,不过和单片机厂家有关,有的提供:印象里SST的好像有;有的就没见过:比如STC的就没见过。2、HEX文件属于一种特殊结构的文件,里面包含了一些控制信息、记录信息等,不完全是单片机的机器码。下载时一般是由PC机的下载软件对HEX进行解析,提出真正需要的单片机机器码传递给单片机,再由单片机自己写入到程序存储器里。还有一种文件格式即BIN文件,才是没有任何其它信息的机器码文件,其文件长度也就是代码实际长度。如果有HEX文件,想看真正的机器码,可以去下载一些编程器软件,在仿真模式下可以使用,将HEX读入既可以看见了。给你个下载链接:http://www.gexin.com.cn/html/download/view.asp?id=648&RootBoardID=&BoardID=&keyword=3、从单片机中读取程序:一般都是用通用型编程器来读取,也就是将芯片拔下来,插到编程器插座上去读。但事实上这一点比较麻烦,因为一般单片机都有加密功能,会对程序代码进行加密,正常方法读出全是0xFF(如果读出的是乱码,恭喜你,说明编程者忘了加密了),所以需要找专人破解,目前的破解水平到什么程度我不了解,你可以打听一下。另外,单片机的加密方式是硬件方式,加密过程中不需要输入密码的,所以也没有密码一说。4、最后,要修改点阵字:前提是必须读出单片机的机器码,然后经反汇编后加以分析,找到点阵信息的位置直接修改就行,这因该不是一件难事,只是搭些功夫罢了。 总之,最好的方法是获得源程序,其它方式恐怕需要些运气才行。

单片机中DISABLE什么意思

无法激活。主板是我们电脑中最重要的配件之一,而bios更是主板上的最重要的组成部分,很多朋友在设置主板bios的时候有看到disabled这样的东西,在我们进行bios设置的时候经常会看到disabled和enabled这样的提示按钮,"disabled"表示不可用,不能用,无法激活",enabled,"表示可以用,能够用,可以激活。

单片机C语言中goto可以这样用吗?

goto语句只能在当前函数里跳转,不能跨函数使用.你需要跳到分支子程序中去执行,貌似只能是通过调用子程序的方法,然后把自身的程序结束,如:void keystoke(){ switch(hyrom){case 0x15: shifen(); return;//这里改用return,直接结束case 0x08: alsetup(); return;}

STC11系列的单片机好像可以设置IO上电默认低电平,请问用软件的方式怎么去设置,好像datasheet里面

STC系列单片机,可以设置成强推挽模式,或者高阻模式、准双向模式。电默认为高电平。没有电默认低电平的功能。一般推动继电器 可以加下拉电阻,然后 上电 先置低电平,再设置成强推挽模式,就不会产生上电时 继电器 的 跳动 一下的 误动作。

单片机datasheet 中 IO逻辑图中 梯形符号 的确切含义 求大神解答

官方活动风格和地方官

单片机的复用功能datasheet?

① 在配置管脚复用功能时对应的代码。② 字面的意思。如果可控则可以在管脚配置时开启或关闭对应的上下拉,如果不可控,则配置上下拉没有实际效果,管脚的这个复用功能具有硬件固化的上拉或下拉。③ 外部中断的触发方式也是可以设置的,你可以参考其用户手册或者例程。④ 这个表格的最前头有介绍,SMT = Schmitt Trigger,也就是说这个管脚的输入是否具有施密特触发特性。

单片机中的Timer0Interrupt(void) interrupt 1什么意思?

正确的写法void timer0_isr() interrupt 1

单片机中的Timer0Interrupt(void) interrupt 3怎么解释呢,希望您详细讲解。

咱们以AT89X52.h这个头文件来说明吧,这个文件中有这么个定义:/*------------------------------------------------InterruptVectors:InterruptAddress=(Number*8)+3------------------------------------------------*/#defineIE0_VECTOR0/*0x03ExternalInterrupt0*/#defineTF0_VECTOR1/*0x0BTimer0*/#defineIE1_VECTOR2/*0x13ExternalInterrupt1*/#defineTF1_VECTOR3/*0x1BTimer1*/#defineSIO_VECTOR4/*0x23Serialport*/#defineTF2_VECTOR5/*0x2BTimer2*/#defineEX2_VECTOR5/*0x2BExternalInterrupt2*/所以,Timer0Interrupt(void)interruptTF1_VECTOR等价于你的这句Timer0Interrupt(void)interrupt3数字3前面的这个interrupt是C51中的一个关键字,当编译器看到它以后,就知道这个函数是一个中断函数,那么编译器就根据interrupt后面的这个数值进行计算,得到中断服务函数的入口地址,这里也就是定时器0的中断服务函数的入口地址0x1B,从而当定时器0中断时,程序指针PC就会指向0x1B,达到执行中断的目的。

单片机 定时器中 interrupt 1的程序 与 主程序的运行顺序 要非常详细的....

推荐一个电子技术导航网站你吧!------ 电子世家网址导航 。它分类收录了很多优秀的电子技术网站,你可以去逛逛的;特别是它里面的那些网站的论坛,有很多大虾分享的资料,希望能对在日后学习、从事电子技术的工作中有帮助

c51单片机中断程序中的interrupt1,2,3是由什么决定的?

interrupt的序号是自然中断优先级序号0是外部中断01定时器0中断2是外部中断13定时器1中断4是串口中断

单片机中void my_int(void)interrupt 2是怎么意思

定义一个外部中断1,名称为my_int返回值为空

单片机中断有什么作用?

51单片机中的外部中断有什么作用? 可以打个比方,每天上班你都随时需要知道你同事的工作进度情况,你是希望你不停地打个电话去问“你做完了吗”,还是希望他做完了主动打个电话给你讲“我做完了,我们谈谈吧”。这就是中断的意义,在不需要的时候不影响处理 器做其它的事情,提高效率,增强程序的实时性。 51单片机中什么是中断?其作用是什么?怎么用?用自己的理解回答把 中断就是中途打断。 通俗解释: 你在看影碟,有人敲门(中断源),中断了你看影碟,观看暂停。处理敲门的事宜(中断目的),处理完成(中断结束),继续看影碟(继续执行原来的任务)。再比如:你在看电视,水开了(中断源),把水灌到暖瓶里(中断目的),再烧上一壶(继续开中断),回去看电视。水又开了。。。。。。。。(循环中断) 以51单片机16位定时计数器0(T0)来讲, 计数是T1是一个能盛65536(十六位时)滴水的水盆,在水龙头下水一滴滴地滴入盆中。如果盆是空的那水在滴完65536滴水时盆子的水就满了再滴一滴的时候就溢出了。这时就会产生中断。 如果盆里面已经装入65500滴水(即初装值),那么只需要36滴水后就溢出了。 每一个水滴计数时即一个脉冲(高低电平变换一次)。 定时时每一个水滴即一个机器周期,水滴的速度即机器周期,等于12个振荡周期(晶振的振荡频率除以12),直接影响到溢出的时间。 51单片机中断系统的作用? 如果没有中断系统,就只能由 CPU 按照程序编写的先后次序,对各个外设,进行巡回检查与处理。 这就是查询式工作方式。 貌似公平,实际效率却不高。 如果有了中断系统,整个计算机系统,就具有了应付突发事件的处理能力。 这就是中断式工作方式。 单片机的中断标志位是有什么作用? 四个问号分为四点一一解答: 1、一般来说单片机的中断发生有两个条件,一是中断标志位置位,二是中断允许,如果这两个条件都满足则进入中断,因为正常情况下中断一直是允许的,那么只能通过标志位来区分是否有中断挂起, 2、如果进入中断不清除标志位,那么这一中断服务程序结束后由于标志位还是置位的并且中断是允许的,那么还会再次进入该中断,就会发生一直在执行中断程序的情况 3、周期性中断是由定时器辅助完成的,只要定时时间到,硬件就会自动置位标志位,这时中断发生,定时器还在运行,与中断处理是并行的没有冲突,因此周期性的中断不是从中断标志位清零开始的。 4、如果中断程序没有执行完并且一下个中断又来了,那么硬件还是会自动置位标志位的,如果在这之前已经清零标志位那么中断结束后会再进入一次该中断,如果这时还没有清除中断标志位,则第二个1毫秒中断无效。 单片机全局中断有什么用 本人觉得是因为现在有中断正在执行,为了不让高优先级的中断使现在的中断发生中断,而采取的保护程序 51单片机中断有什么作用 打个比方,你在房间看书,看书这个事是持久性的,拖延几分钟也没事。突然淘宝买的衣服送到了,镖局的人敲门,你用书签做好标记去开门。拿回衣服,回去继续看书。这个事的发生过程很正常。 同样的,看书就像单片机的一般事务处理,收快递就像中断。主要是应对紧急的,有时效要求的事件的发生。书签就是进出中断相关的现场保护。 具体点,主程序中有LED不停的闪烁,由于外部按键的触发,告诉你该发个字节出去。这时,可以产生个按键相关的中断(引脚电平中断),去中断发个字节,然后赶紧回来继续闪烁LED。 重要总结:就这么回事! 单片机程序什么作用啊 尤其是X++作用 定时器中断作用是什么呢? x应该是一个全局变量,每次中断函数都会将x加1,程序的其余函数会扫描x的值来做出相应的动作, interrupt 1 是计时器中断,这里应该是用一个全局变量计时,main函数或者其他中断函数检查x的数值做到定时的响应,如闪灯或者屏幕刷新又或者PWM输出 , 定时器中断的作用是在CPU运行期间 ,定时器在不干扰CPU正常运行的情况下不停地将自身寄存器(从你的函数初始化看是TH0和TL0并起来的一个16位值)减一,当寄存器值为0时候发起中断(从1减去1开始到寄存器值为0之间发起的),这样可以做到CPU不用一直等待一个时间的到来而空转,或者运行一个程序的过程中计算运行的时间并定时插入一个额外的工作, C51的计时器有4个工作模式(对于At89S51或者STC89C52及以上型号来说)不同的模式有不同的功能,这个百度文库能看到的,另外TMOD寄存器和其他寄存器还设定了计时器是外部的跳变信号或者单片机内部时钟来引起计时器的一次减1动作(计时动作)。 另外计时器可以设置为外部输入模式,这样就能作为计数器,比如说一个外接的按键,按10次后才触发中断,如果用外中断处理,那么整个主函数会被中断九次做无效中断才能等到第十次按键执行需要的中断处理动作。 这一点在操作系统中也用到了,比如我们的PC的多任务操作系统,就是用时钟中断来把一个程序中断执行另一个程序(比如操作系统和应用程序间)实现了时间片轮转,不过PC的操作系统把所有的中断处理函数都包含进去了,所以我们基本不用去管硬件中断就能编程。 反观单片机,因为资源有限,想要做到多任务(主函数与各个中断函数及其子函数)必须用定时器(也可以通过外部信号做计数器)以及外中断作为契机来切换多个任务。 如果需要解答整个中断函数的功能,最好把全部的程序都帖出来,因为x这个全局变量的作用没有在中断函数中体现 有问题可以继续跟我交流,我现在是大学本科生,学过C51单片机,正在学STM32 单片机中断寄存器的作用是什么? 中断寄存器就是用于存贮中断状态的 包含是否启用中断 或者是 是否发生中断 #include void InitUART(void){ TMOD = 0x20; 计时器类型 SCON = 0x50; TH1 = 0xFD; TL1 = TH1; PCON = 0x00; EA = 1; 中断寄存器的操作 ES = 1; TR1 = 1; 计时器1的中断}void SendOneByte(unsigned char c){ SBUF = c; while(!TI); TI = 0;}void main(void){ InitUART();}void UARTInterrupt(void) interrupt 4{ if(RI) { RI = 0; add your code here! } else TI = 0;} 单片机中断 的interrupt 0 using 1中的using有什么作用 看到楼上二位说的有误,特纠正。 void INT0()interrupt 0 using 1 {.... 棱.... } interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断; using 0 是第0组寄存器; using 1 是第1组寄存器; using 2 是第2组寄存器; using 3 是第3组寄存器; 51单片机内的寄存器是R0--R7(不是R0-R3) R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。 using 0时设置 RS1=0,RS0 =0,用第0组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(00H)....R7(07H) using 1时设置 RS1=0,RS0 =1,用第1组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(08H)....R7(0FH) using 2时设置 RS1=1,RS0 =0,用第2组寄存器,R0--R7的在数据存储区里的实际地址是08H-0FH。R0(10H)....R7(17H) using 3时设置 RS1=1,RS0 =1,用第3组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(18H)....R7(1FH) 单片机为什么使用中断 中断保护现场,是为了你中断子程序执行完以后能够返回到你程序中中断点,即产生中断的地方,使程序能够继续向下执行!!!! 如过你说的不用保护现场的话,那么程序执行完以后就不能够回到现场,那么你的程序将不知道要跳转到那里去了,也就是飞鸟,呵呵…… 你说的中断嵌套,也是一样的,两者都要保护现场,不然你也不能够回到现场,程序也会飞的!!!! 而我们保护现场的数据都是放在堆栈中的,因此,你的中断次数也不能够超过堆栈的级数,那样数据也会丢失!!!! 说白了,中断它不同于子程序,子程序是固定好了的,返回的位置也固定了;而中断我们不能够预知它在那里发生中断,因此要保护现场,使中断子程序执行完后返回到中断的地方!!! 呵呵……说的太多了!!! 我知道你说的意思了,但是你要知道,中断现场保护是在中断子程序中进行的,因此当你高一级的中断发生的时候(他们不可能共用一个中断子程序,如果是同一中断,那也不可能,因为51中断中你进入中断子程序后要将禁止该中断再次中断,好象似的,嘿嘿……你可以试试),在高一级的中断子程序中也有现场保护,你的问题就是没有把现场保护放对地方!!!!! ============================================================ 它们是把现场保护在同一堆栈中,我跟你打个比方吧,假如说堆栈的地址是80H,低一级的中断要保护的是1,2,3;高一级要保护的现场是4,5,6,那么在低一级的中断发生的时候,现场保护1,2,3将压如堆栈,(顺序书上应该有,这里是个比喻),那我先压入1,堆栈阀址加1,压入2,堆栈地址再加1,如果这个时候高一级的中断发生,那么现在就应该跳到高一级中断的子程序,堆栈地址就是82H了,在将4,5,6分别压入堆栈,这样堆栈的地址就是85H,当高一级的中断子程序结束后,返回现场,堆栈的数据要从85H开始弹出,这样现场返回的就是6,5,4,这个时候程序就会跳到中断之前的地方,即底一级的中断那里,将要继续将3保护到堆栈中,在执行低一级的中断子程序.(其中,你要在中断保护现场完了后将中断标志清0啊,不然它始终会中断的,不可能去执行程序去了...)

c51单片机中断程序中的interrupt1,2,3是由什么决定的?

硬件决定

单片机c语言中interrupt4表示什么意思

就是代表串口中断啊。你知道还问

单片机c语言中interrupt4表示什么意思

对51来说,中断0外部中断0中断1定时器1中断中断2外部中断1中断3定时器2中断中断4串口中断当PC机发给51数据(通过RS232串口)时就会触发这个中断一般要写个函数响应中断,函数名随便,但是格式必须一定:例如voidUART_Interrupt_Receive(void)interrupt4{unsignedchark=0;if(RI==1){RI=0;k=SBUF;....}else{}}

c51单片机中断程序中的interrupt1,2,3是由什么决定的?

分别对应着5个中断源,编译时自动生成相应的中断服务入口地址:interrupt0:外部中断0interrupt1:定时器0interrupt2:外部中断1interrupt3:定时器1interrupt4:串口

单片机中的 interrupt 是什么意思?

中断

单片机C语言中,中断子程序后面为什么要加interrupt这个单词?

估计是为了让程序可读性更好一些,一眼就看到了这是中断

51单片机中写函数时 interrutp 后面的数字 如1,2,3,4 都有特定的意义吗?还是这是数字可以随便用

void INT0()interrupt 0 using 1{.........}interrupt 0 指明是外部中断0;interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1;interrupt 3 指明是定时器中断1;interrupt 4 指明是串行口中断;using 0 是第0组寄存器;using 1 是第1组寄存器;using 2 是第2组寄存器;using 3 是第3组寄存器;51单片机内的寄存器是R0--R7(不是R0-R3)R0-R7在数据存储器里的实际地址是由特殊功能寄存器PSW里的RS1、RS0位决定的。using 0时设置 RS1=0,RS0 =0,用第0组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(00H)....R7(07H)using 1时设置 RS1=0,RS0 =1,用第1组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(08H)....R7(0FH)using 2时设置 RS1=1,RS0 =0,用第2组寄存器,R0--R7的在数据存储区里的实际地址是08H-0FH。R0(10H)....R7(17H)using 3时设置 RS1=1,RS0 =1,用第3组寄存器,R0--R7的在数据存储区里的实际地址是00H-07H。R0(18H)....R7(1FH)

c51单片机中断程序中的interrupt1,2,3是由什么决定的?

0,1,2,3,4对应外部0,定时器0,外部1,定时器1,串口

单片机C语言中,中断子程序后面为什么要加interrupt这个单词?

voidfunctionName()interrupt1//using2类型固定为void即无返回值中断函数名functionName只要是合法标识,不与已有的函数重名即可,且函数固定无参数interrupt为关键字,表明当前是一个中断函数,不需要被主函数直接或间接调用,也会编译连接进程序中,一般的非中断函数如果未被主函数直接或间接调用,也不被中断函数直接或间接调用,则不会链接进程序最终代码interrupt后的数字表明是中断号几,单片机中51系列的有01234等几个中断,52系列的中断可能到了7或8中断号与中断事件是绑定的,不能随便设置,对应的中断向量会指向这个函数入口地址可选的usingN表示中断中使用第几个寄存器组

一个单片机控制两个DS18B20,该注意什么问题,进行ROM匹配么?急需解答啊,哪位高手帮帮我啊!

释放总线问题

单片机中 所有元器件的名称 比如RES 是电阻 大虾们 谢了哈

单片机,MCU单片机是个名词,是个IC的名字,没有什么元件名称RES在DXP等画图软件中好像是指R,不知道你到底问的啥

如何用PID算法编程,使单片机通过控制继电器来实现恒温功能。

/*********************************************************************** PID温度控制程序程序说明: 系统上电后显示 “--温度” 表示需要先设定温度才开始进行温度检测 温度设定完毕后程序才开始进行PID温控***********************************************************************/#include <reg52.h>#include <absacc.h>#include"DS18B20.H"#include"PID.H"#define uchar unsigned char#define uint unsigned intunsigned char code tab[]={ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xBF};/*个位0~9的数码管段码*/unsigned char code sao[]={ 0x7f,0xbf,0xdf,0xef};//扫描码uchar set=30,keyflag=1 ; //set初始化为30° keyflag为进入温度设定的标志位//4个按键使用说明sbit key_out=P1^0 ; //用于温度设定后的退出sbit key_up=P1^1 ; //设定温度加sbit key_down=P1^2 ; //设定温度减sbit key_in=P1^3 ; //在程序的运行中如需要重新设定温度 按下此键才能进入设置模式并且此时是停在温度控制的,按下key_out键后才表示设定完毕void Show_key();/***********************************************************/void delays(unsigned char k){ unsigned char i,j ; for(i=0;i<k;i++) for(j=0;j<50;j++);}/*********************************************************//数码管显示函数P0口 作为数据口P2口的低四位作为扫描口变量 x表示扫描d表示是否要加小数点 为1是 为0不加y表示传递的数值*********************************************************/LCD_disp_char(uchar x,bit d,uchar y){ P2=0XFF ; P0=0xFF ; if(d==0) P0=tab[y]; else P0=tab[y]&0x7f ; //与上0x7f表示是否要加小数点 P2=sao[x]; //打开扫描端号 }/*********************************************************按键扫描*********************************************************/void keyscan(void){ if(key_in==0) //按键进入函数 { delays(10); //延时消抖 (以下同) if(key_in==0) { while(key_in==0) { Show_key(); //如果一直按着键不放 就一直显示在当前状态 (以下同) } keyflag=1 ; //按键标志位 } } /***********************/ if(key_out==0) //按键退出 { delays(10); if(key_out==0) { while(key_out==0) { Show_key(); } keyflag=0 ; set_temper=set ; } } /*************************/ if(key_up==0) //设定温度的加 { delays(10); if(key_up==0) { while(key_up==0) { Show_key(); } if(keyflag==1) { set++; if(set>90) //如果大于90°就不在加 set=90 ; } } } /*************************/ if(key_down==0) //温度设定的减 { delays(10); if(key_down==0) { while(key_down==0) { Show_key(); } if(keyflag==1) { set--; if(set<30) //温度减到30°时不在往下减 set=30 ; } } }}/*********************************************************************按键按下时的显示函数***********************************************************************/void Show_key() { output=1 ; LCD_disp_char(3,0,10); //显示 - delays(3); LCD_disp_char(2,0,10); //显示- (表示温度设定 ) delays(3); LCD_disp_char(1,0,set/10); //显示温度十位 delays(3); LCD_disp_char(0,0,set%10); //显示温度个位 delays(3);}/*****************************************************************/void main(){ unsigned int tmp ;//声明温度中间变量 unsigned char counter=0 ; PIDBEGIN(); //PID参数的初始化 output=1 ; //关闭继电器输出 while(1) { keyscan(); if(keyflag) { Show_key(); //显示温度设定 } else { if(counter--==0) { tmp=ReadTemperature();//每隔一段时间读取温度值 counter=20 ; } LCD_disp_char(3,0,tmp/1000); //显示温度十位 delays(3); LCD_disp_char(2,1,tmp/100%10); //显示温度个位 //显示小数点 delays(3); LCD_disp_char(1,0,tmp/10%10); //显示温度小数后一位 delays(3); LCD_disp_char(0,0,tmp%10);//显示温度小数后二位 delays(3); P2=0XFF ; P0=0xff ; compare_temper(); //比较温度} }}/**********************************************************************************************************************************************///PID算法温控C语言2008-08-17 18:58#ifndef _PID_H__#define _PID_H__#include<intrins.h>#include<math.h>#include<string.h>struct PID{ unsigned int SetPoint ; // 设定目标 Desired Value unsigned int Proportion ; // 比例常数 Proportional Const unsigned int Integral ; // 积分常数 Integral Const unsigned int Derivative ; // 微分常数 Derivative Const unsigned int LastError ; // Error[-1] unsigned int PrevError ; // Error[-2] unsigned int SumError ; // Sums of Errors};struct PID spid ;// PID Control Structureunsigned int rout ;// PID Response (Output)unsigned int rin ;// PID Feedback (Input)sbit output=P1^4;unsigned char high_time,low_time,count=0 ;//占空比调节参数unsigned char set_temper ;void PIDInit(struct PID*pp){ memset(pp,0,sizeof(struct PID)); //PID参数初始化全部设置为0}unsigned int PIDCalc(struct PID*pp,unsigned int NextPoint){ unsigned int dError,Error ; Error=pp->SetPoint-NextPoint ; // 偏差 pp->SumError+=Error ; // 积分 dError=pp->LastError-pp->PrevError ; // 当前微分 pp->PrevError=pp->LastError ; pp->LastError=Error ; //比例 //积分项 return(pp->Proportion*Error+pp->Integral*pp->SumError+pp->Derivative*dError); // 微分项}/***********************************************************温度比较处理子程序***********************************************************/void compare_temper(){ unsigned char i ; //EA=0; if(set_temper>temper) { if(set_temper-temper>1) { high_time=100 ; //大于1°不进行PID运算 low_time=0 ; } else { //在1°范围内进行PID运算 for(i=0;i<10;i++) { //get_temper(); rin=s; // Read Input rout=PIDCalc(&spid,rin); //执行PID运算 // Perform PID Interation } if(high_time<=100) //限制最大值 high_time=(unsigned char)(rout/800); else high_time=100; low_time=(100-high_time); } }/****************************************/ else if(set_temper<=temper) //当实际温度大于设置温度时 { if(temper-set_temper>0)//如果实际温度大于设定温度 { high_time=0 ; low_time=100 ; } else { for(i=0;i<10;i++) { //get_temper(); rin=s ; // Read Input rout=PIDCalc(&spid,rin); // Perform PID Interation } if(high_time<100) //此变量是无符号字符型 high_time=(unsigned char)(rout/10000); else high_time=0 ;//限制不输出负值 low_time=(100-high_time); //EA=1; } }}/*****************************************************T0中断服务子程序,用于控制电平的翻转 ,40us*100=4ms周期******************************************************/void serve_T0()interrupt 1 using 1{ if(++count<=(high_time)) output=0 ; else if(count<=100) { output=1 ; } else count=0 ; TH0=0x2f ; TL0=0xe0 ;}void PIDBEGIN(){ TMOD=0x01 ; TH0=0x2f ; TL0=0x40 ; EA=1 ; ET0=1 ; TR0=1 ; high_time=50 ; low_time=50 ; PIDInit(&spid); // Initialize Structure spid.Proportion=10 ; // Set PID Coefficients spid.Integral=8 ; spid.Derivative=6 ; spid.SetPoint=100 ; // Set PID Setpoint }#endif 转自他人程序。

单片机关于STARTUP.A51

STARTUP.51是51单片机的启动代码。

单片机如何设计一款自动浇花控制器?要求根据湿度,早晚浇花?

关键再于传感器

如何运用单片机原理制作智能信号发生器,要求产生方波、矩形波、三角波、锯齿波和正弦波。

看你的要求可以用单片机的DA 转换器来实现,在内部建立波形表。或者用外部的DDS芯片,网上有许多基于DDS的信号发生器。

51单片机程序编写

怎么给你写程序,没有实物

单片机计数程序问题

可能还没来得及显示,就复位了

关于51单片机,ds1302芯片的一个子程序问题,谢谢解答

dat1实际上是单个位。这行语句的作用是将dat右移,然后将dat1中刚接收到的那个位放到dat的最高位上。循环执行后,即可将顺序接收的8个位按照从低到高的顺序排列并存储在dat中。

请解释下单片机中的C语言程序

在你include的头文件里肯定有ADDO的定义,一定是个输入端口,dat|=ADDO代表dat=dat|ADDO;之后dat<<=1就是dat=dat<<1,左移1位,i==7就是最后1位的时候又采样1次。

求大神帮忙编写单片机控制步进电机C语言编程,图片如下,AT89C51单片机四相八拍,ULN2004驱动芯片

#include "reg52.h" //Motorsbit A = P2^0; //定义管脚sbit b = P2^1;sbit C = P2^2;sbit D = P2^3; /////////////////////////////////////////步进电机驱动unsigned char MotorStep=0;unsigned int MotorTimer = 0;unsigned int MotorDelay,Speed=1,TIM,CT;#define speed 8 // 调整速度 数值不要设的太低 低了会引起震动。/****************************************************** 初始化马达 *******************************************************/void InitMotor(){ A = 1; b = 1; C = 1; D = 1;}void SetMotor(){ // if(Speed == 0) return; MotorDelay=Speed; //调整速度 switch(MotorStep) { case 0: if(TIM) // A { A = 0; //0xf1 b = 1; C = 1; D = 1; MotorStep = 1; TIM=0; } break; case 1: // AB if(TIM) { A = 0; //0xf3 b = 0; C = 1; D = 1; MotorStep = 2; TIM=0; } break; case 2: //B if(TIM) { A = 1; b = 0; //0xf2 C = 1; D = 1; MotorStep = 3; TIM=0; } break;case 3: //BC if(TIM) { A = 1; b = 0; //0xf6 C = 0; D = 1; MotorStep = 4; TIM=0; } break; case 4: //C if(TIM) { A = 1; b = 1; //0xf4 C = 0; D = 1; MotorStep = 5; TIM=0; } break; case 5: //CD if(TIM) { A = 1; b = 1; //0xfc C = 0; D = 0; MotorStep = 6; TIM=0; } break; case 6: //D if(TIM) { A = 1; b = 1; //0xf8 C = 1; D = 0; MotorStep = 7; TIM=0; } break; case 7: //DA if(TIM) { A = 0; b = 1; //0xf9 C = 1; D = 0; MotorStep = 0; TIM=0; } break; }}void system_Ini(){ TMOD|= 0x11; TH0=0xDC; //11.0592M TL0=0x00; IE = 0x8A; TR0 = 1;}main() { system_Ini(); InitMotor(); while(1) { SetMotor(); }}/************************************************* ** 定时中断延时 *************************************************/ void Tzd(void) interrupt 1{ TH0 = 0xfe; //11.0592 TL0 = 0x33; if( CT++==speed) {TIM=1; CT=0; } }

单片机c语言TMOD 设置

TMOD寄存器低四位设置计数器定时器0;TMOD寄存器高四位设置计数器定时器1;计数器定时器0,和计数器定时器1,一般独立使用。如果直接给TMOD赋值,意味着同时对计数器定时器0,和计数器定时器1,进行设计。如果不是这样,就分别设置TMOD寄存器低四位,和TMOD寄存器高四位。下面解释这句话:TMOD=(TMOD&0xF0)|0x01TMOD高四位的值不变,即,计数器定时器0,按照原来的设置不变;TMOD低四位置为0x01,即,计数器定时器1,设置为16位定时,也就是方式一。看懂点赞呀!

单片机实现4位一体数码管显示0000—FFFF的16进制(C语言编程)

//段码由P0口输出,P2.3-P2.0依次接位选的高到低#include<reg51.h>typedef unsigned char u8;typedef unsigned int u16;void Delay(void);void Disp(void);u16 Cnt;u8 code LED[]={0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,// 80x6F,// 90x77,// A0x7C,// B0x39,// C0x5E,// D0x79,// E0x71// F};void Delay(void){u16 i;for(i = 0;i < 200;i ++);}void Disp(void){u8 i,k = 0x01;for(i = 0;i < 4;i ++){P0 = LED[(Cnt >> (i * 4)) & 0x000f];P2 = k | 0xf0;k <<= 1;Delay();P0 = 0xff;P2 &= 0xf0;}}void main(void){u8 i;Cnt = 0;while(1){for(i = 0;i < 100;i ++)//显示100次,显示值加1{Disp();}Cnt ++;}}

求单片机的公历转农历的c程序,最好多带点注释,谢谢

从哪年到哪年?自已编一个函数就行了.输入公历 年月日,返回农历 年月日.

谁有现成的公历转农历的单片机程序?发一份到我邮箱:luojunjie231@163.com!十分感谢!

//C51写的公历转农历和星期 #define uchar unsigned char #define uint unsigned int #include <intrins.h> /* 公历年对应的农历数据,每年三字节, 格式第一字节BIT7-4 位表示闰月月份,值为0 为无闰月,BIT3-0 对应农历第1-4 月的大小 第二字节BIT7-0 对应农历第5-12 月大小,第三字节BIT7 表示农历第13 个月大小 月份对应的位为1 表示本农历月大(30 天),为0 表示小(29 天) 第三字节BIT6-5 表示春节的公历月份,BIT4-0 表示春节的公历日期 */ code uchar year_code[597] = { 0x04,0xAe,0x53, //1901 0 0x0A,0x57,0x48, //1902 3 0x55,0x26,0xBd, //1903 6 0x0d,0x26,0x50, //1904 9 0x0d,0x95,0x44, //1905 12 0x46,0xAA,0xB9, //1906 15 0x05,0x6A,0x4d, //1907 18 0x09,0xAd,0x42, //1908 21 0x24,0xAe,0xB6, //1909 0x04,0xAe,0x4A, //1910 0x6A,0x4d,0xBe, //1911 0x0A,0x4d,0x52, //1912 0x0d,0x25,0x46, //1913 0x5d,0x52,0xBA, //1914 0x0B,0x54,0x4e, //1915 0x0d,0x6A,0x43, //1916 0x29,0x6d,0x37, //1917 0x09,0x5B,0x4B, //1918 0x74,0x9B,0xC1, //1919 0x04,0x97,0x54, //1920 0x0A,0x4B,0x48, //1921 0x5B,0x25,0xBC, //1922 0x06,0xA5,0x50, //1923 0x06,0xd4,0x45, //1924 0x4A,0xdA,0xB8, //1925 0x02,0xB6,0x4d, //1926 0x09,0x57,0x42, //1927 0x24,0x97,0xB7, //1928 0x04,0x97,0x4A, //1929 0x66,0x4B,0x3e, //1930 0x0d,0x4A,0x51, //1931 0x0e,0xA5,0x46, //1932 0x56,0xd4,0xBA, //1933 0x05,0xAd,0x4e, //1934 0x02,0xB6,0x44, //1935 0x39,0x37,0x38, //1936 0x09,0x2e,0x4B, //1937 0x7C,0x96,0xBf, //1938 0x0C,0x95,0x53, //1939 0x0d,0x4A,0x48, //1940 0x6d,0xA5,0x3B, //1941 0x0B,0x55,0x4f, //1942 0x05,0x6A,0x45, //1943 0x4A,0xAd,0xB9, //1944 0x02,0x5d,0x4d, //1945 0x09,0x2d,0x42, //1946 0x2C,0x95,0xB6, //1947 0x0A,0x95,0x4A, //1948 0x7B,0x4A,0xBd, //1949 0x06,0xCA,0x51, //1950 0x0B,0x55,0x46, //1951 0x55,0x5A,0xBB, //1952 0x04,0xdA,0x4e, //1953 0x0A,0x5B,0x43, //1954 0x35,0x2B,0xB8, //1955 0x05,0x2B,0x4C, //1956 0x8A,0x95,0x3f, //1957 0x0e,0x95,0x52, //1958 0x06,0xAA,0x48, //1959 0x7A,0xd5,0x3C, //1960 0x0A,0xB5,0x4f, //1961 0x04,0xB6,0x45, //1962 0x4A,0x57,0x39, //1963 0x0A,0x57,0x4d, //1964 0x05,0x26,0x42, //1965 0x3e,0x93,0x35, //1966 0x0d,0x95,0x49, //1967 0x75,0xAA,0xBe, //1968 0x05,0x6A,0x51, //1969 0x09,0x6d,0x46, //1970 0x54,0xAe,0xBB, //1971 0x04,0xAd,0x4f, //1972 0x0A,0x4d,0x43, //1973 0x4d,0x26,0xB7, //1974 0x0d,0x25,0x4B, //1975 0x8d,0x52,0xBf, //1976 0x0B,0x54,0x52, //1977 0x0B,0x6A,0x47, //1978 0x69,0x6d,0x3C, //1979 0x09,0x5B,0x50, //1980 0x04,0x9B,0x45, //1981 0x4A,0x4B,0xB9, //1982 0x0A,0x4B,0x4d, //1983 0xAB,0x25,0xC2, //1984 0x06,0xA5,0x54, //1985 0x06,0xd4,0x49, //1986 0x6A,0xdA,0x3d, //1987 0x0A,0xB6,0x51, //1988 0x09,0x37,0x46, //1989 0x54,0x97,0xBB, //1990 0x04,0x97,0x4f, //1991 0x06,0x4B,0x44, //1992 0x36,0xA5,0x37, //1993 0x0e,0xA5,0x4A, //1994 0x86,0xB2,0xBf, //1995 0x05,0xAC,0x53, //1996 0x0A,0xB6,0x47, //1997 0x59,0x36,0xBC, //1998 0x09,0x2e,0x50, //1999 294 0x0C,0x96,0x45, //2000 297 0x4d,0x4A,0xB8, //2001 0x0d,0x4A,0x4C, //2002 0x0d,0xA5,0x41, //2003 0x25,0xAA,0xB6, //2004 0x05,0x6A,0x49, //2005 0x7A,0xAd,0xBd, //2006 0x02,0x5d,0x52, //2007 0x09,0x2d,0x47, //2008 0x5C,0x95,0xBA, //2009 0x0A,0x95,0x4e, //2010 0x0B,0x4A,0x43, //2011 0x4B,0x55,0x37, //2012 0x0A,0xd5,0x4A, //2013 0x95,0x5A,0xBf, //2014 0x04,0xBA,0x53, //2015 0x0A,0x5B,0x48, //2016 0x65,0x2B,0xBC, //2017 0x05,0x2B,0x50, //2018 0x0A,0x93,0x45, //2019 0x47,0x4A,0xB9, //2020 0x06,0xAA,0x4C, //2021 0x0A,0xd5,0x41, //2022 0x24,0xdA,0xB6, //2023 0x04,0xB6,0x4A, //2024 0x69,0x57,0x3d, //2025 0x0A,0x4e,0x51, //2026 0x0d,0x26,0x46, //2027 0x5e,0x93,0x3A, //2028 0x0d,0x53,0x4d, //2029 0x05,0xAA,0x43, //2030 0x36,0xB5,0x37, //2031 0x09,0x6d,0x4B, //2032 0xB4,0xAe,0xBf, //2033 0x04,0xAd,0x53, //2034 0x0A,0x4d,0x48, //2035 0x6d,0x25,0xBC, //2036 0x0d,0x25,0x4f, //2037 0x0d,0x52,0x44, //2038 0x5d,0xAA,0x38, //2039 0x0B,0x5A,0x4C, //2040 0x05,0x6d,0x41, //2041 0x24,0xAd,0xB6, //2042 0x04,0x9B,0x4A, //2043 0x7A,0x4B,0xBe, //2044 0x0A,0x4B,0x51, //2045 0x0A,0xA5,0x46, //2046 0x5B,0x52,0xBA, //2047 0x06,0xd2,0x4e, //2048 0x0A,0xdA,0x42, //2049 0x35,0x5B,0x37, //2050 0x09,0x37,0x4B, //2051 0x84,0x97,0xC1, //2052 0x04,0x97,0x53, //2053 0x06,0x4B,0x48, //2054 0x66,0xA5,0x3C, //2055 0x0e,0xA5,0x4f, //2056 0x06,0xB2,0x44, //2057 0x4A,0xB6,0x38, //2058 0x0A,0xAe,0x4C, //2059 0x09,0x2e,0x42, //2060 0x3C,0x97,0x35, //2061 0x0C,0x96,0x49, //2062 0x7d,0x4A,0xBd, //2063 0x0d,0x4A,0x51, //2064 0x0d,0xA5,0x45, //2065 0x55,0xAA,0xBA, //2066 0x05,0x6A,0x4e, //2067 0x0A,0x6d,0x43, //2068 0x45,0x2e,0xB7, //2069 0x05,0x2d,0x4B, //2070 0x8A,0x95,0xBf, //2071 0x0A,0x95,0x53, //2072 0x0B,0x4A,0x47, //2073 0x6B,0x55,0x3B, //2074 0x0A,0xd5,0x4f, //2075 0x05,0x5A,0x45, //2076 0x4A,0x5d,0x38, //2077 0x0A,0x5B,0x4C, //2078 0x05,0x2B,0x42, //2079 0x3A,0x93,0xB6, //2080 0x06,0x93,0x49, //2081 0x77,0x29,0xBd, //2082 0x06,0xAA,0x51, //2083 0x0A,0xd5,0x46, //2084 0x54,0xdA,0xBA, //2085 0x04,0xB6,0x4e, //2086 0x0A,0x57,0x43, //2087 0x45,0x27,0x38, //2088 0x0d,0x26,0x4A, //2089 0x8e,0x93,0x3e, //2090 0x0d,0x52,0x52, //2091 0x0d,0xAA,0x47, //2092 0x66,0xB5,0x3B, //2093 0x05,0x6d,0x4f, //2094 0x04,0xAe,0x45, //2095 0x4A,0x4e,0xB9, //2096 0x0A,0x4d,0x4C, //2097 0x0d,0x15,0x41, //2098 0x2d,0x92,0xB5, //2099 }; ///月份数据表 code uchar day_code1[9]={0x0,0x1f,0x3b,0x5a,0x78,0x97,0xb5,0xd4,0xf3}; code uint day_code2[3]={0x111,0x130,0x14e}; /* 函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年) 调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun) 如:计算2004年10月16日Conversion(0,0x4,0x10,0x16); c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世 纪,c_sun=1为19世纪 调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据 */ bit c_moon; data uchar year_moon,month_moon,day_moon,week; /*子函数,用于读取数据表中农历月的大月或小月,如果该月为大返回1,为小返回0*/ bit get_moon_day(uchar month_p,uint table_addr) { uchar temp; switch (month_p) { case 1:{temp=year_code[table_addr]&0x08; if (temp==0)return(0);else return(1);} case 2:{temp=year_code[table_addr]&0x04; if (temp==0)return(0);else return(1);} case 3:{temp=year_code[table_addr]&0x02; if (temp==0)return(0);else return(1);} case 4:{temp=year_code[table_addr]&0x01; if (temp==0)return(0);else return(1);} case 5:{temp=year_code[table_addr+1]&0x80; if (temp==0) return(0);else return(1);} case 6:{temp=year_code[table_addr+1]&0x40; if (temp==0)return(0);else return(1);} case 7:{temp=year_code[table_addr+1]&0x20; if (temp==0)return(0);else return(1);} case 8:{temp=year_code[table_addr+1]&0x10; if (temp==0)return(0);else return(1);} case 9:{temp=year_code[table_addr+1]&0x08; if (temp==0)return(0);else return(1);} case 10:{temp=year_code[table_addr+1]&0x04; if (temp==0)return(0);else return(1);} case 11:{temp=year_code[table_addr+1]&0x02; if (temp==0)return(0);else return(1);} case 12:{temp=year_code[table_addr+1]&0x01; if (temp==0)return(0);else return(1);} case 13:{temp=year_code[table_addr+2]&0x80; if (temp==0)return(0);else return(1);} } } /* 函数功能:输入BCD阳历数据,输出BCD阴历数据(只允许1901-2099年) 调用函数示例:Conversion(c_sun,year_sun,month_sun,day_sun) 如:计算2004年10月16日Conversion(0,0x4,0x10,0x16); c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世 纪,c_sun=1为19世纪 调用函数后,原有数据不变,读c_moon,year_moon,month_moon,day_moon得出阴历BCD数据 */ void Conversion(bit c,uchar year,uchar month,uchar day) { //c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据 uchar temp1,temp2,temp3,month_p; uint temp4,table_addr; bit flag2,flag_y; temp1=year/16; //BCD->hex 先把数据转换为十六进制 temp2=year%16; year=temp1*10+temp2; temp1=month/16; temp2=month%16; month=temp1*10+temp2; temp1=day/16; temp2=day%16; day=temp1*10+temp2; //定位数据表地址 if(c==0) { table_addr=(year+0x64-1)*0x3; } else { table_addr=(year-1)*0x3; } //定位数据表地址完成 //取当年春节所在的公历月份 temp1=year_code[table_addr+2]&0x60; temp1=_cror_(temp1,5); //取当年春节所在的公历月份完成 //取当年春节所在的公历日 temp2=year_code[table_addr+2]&0x1f; //取当年春节所在的公历日完成 // 计算当年春年离当年元旦的天数,春节只会在公历1月或2月 if(temp1==0x1) { temp3=temp2-1; } else { temp3=temp2+0x1f-1; } // 计算当年春年离当年元旦的天数完成 //计算公历日离当年元旦的天数,为了减少运算,用了两个表 //day_code1[9],day_code2[3] //如果公历月在九月或前,天数会少于0xff,用表day_code1[9], //在九月后,天数大于0xff,用表day_code2[3] //如输入公历日为8月10日,则公历日离元旦天数为day_code1[8-1]+10-1 //如输入公历日为11月10日,则公历日离元旦天数为day_code2[11-10]+10-1 if (month<10) { temp4=day_code1[month-1]+day-1; } else { temp4=day_code2[month-10]+day-1; } if ((month>0x2)&&(year%0x4==0)) { //如果公历月大于2月并且该年的2月为闰月,天数加1 temp4+=1; } //计算公历日离当年元旦的天数完成 //判断公历日在春节前还是春节后 if (temp4>=temp3) { //公历日在春节后或就是春节当日使用下面代码进行运算 temp4-=temp3; month=0x1; month_p=0x1; //month_p为月份指向,公历日在春节前或就是春节当日month_p指向首月 flag2=get_moon_day(month_p,table_addr); //检查该农历月为大小还是小月,大月返回1,小月返回0 flag_y=0; if(flag2==0)temp1=0x1d; //小月29天 else temp1=0x1e; //大小30天 temp2=year_code[table_addr]&0xf0; temp2=_cror_(temp2,4); //从数据表中取该年的闰月月份,如为0则该年无闰月 while(temp4>=temp1) { temp4-=temp1; month_p+=1; if(month==temp2) { flag_y=~flag_y; if(flag_y==0) month+=1; } else month+=1; flag2=get_moon_day(month_p,table_addr); if(flag2==0)temp1=0x1d; else temp1=0x1e; } day=temp4+1; } else { //公历日在春节前使用下面代码进行运算 temp3-=temp4; if (year==0x0) { year=0x63;c=1; } else year-=1; table_addr-=0x3; month=0xc; temp2=year_code[table_addr]&0xf0; temp2=_cror_(temp2,4); if (temp2==0) month_p=0xc; else month_p=0xd; // /*month_p为月份指向,如果当年有闰月,一年有十三个月,月指向13,无闰月指向12*/ flag_y=0; flag2=get_moon_day(month_p,table_addr); if(flag2==0)temp1=0x1d; else temp1=0x1e; while(temp3>temp1) { temp3-=temp1; month_p-=1; if(flag_y==0)month-=1; if(month==temp2)flag_y=~flag_y; flag2=get_moon_day(month_p,table_addr); if(flag2==0)temp1=0x1d; else temp1=0x1e; } day=temp1-temp3+1; } c_moon=c; //HEX->BCD ,运算结束后,把数据转换为BCD数据 temp1=year/10; temp1=_crol_(temp1,4); temp2=year%10; year_moon=temp1|temp2; temp1=month/10; temp1=_crol_(temp1,4); temp2=month%10; month_moon=temp1|temp2; temp1=day/10; temp1=_crol_(temp1,4); temp2=day%10; day_moon=temp1|temp2; } /*函数功能:输入BCD阳历数据,输出BCD星期数据(只允许1901-2099年) 调用函数示例:Conver_week(c_sun,year_sun,month_sun,day_sun) 如:计算2004年10月16日Conversion(0,0x4,0x10,0x16); c_sun,year_sun,month_sun,day_sun均为BCD数据,c_sun为世纪标志位,c_sun=0为21世 纪,c_sun=1为19世纪 调用函数后,原有数据不变,读week得出阴历BCD数据 */ code uchar table_week[12]={0,3,3,6,1,4,6,2,5,0,3,5}; //月修正数据表 /* 算法:日期+年份+所过闰年数+月较正数之和除7 的余数就是星期但如果是在 闰年又不到3 月份上述之和要减一天再除7 星期数为0 */ void Conver_week(bit c,uchar year,uchar month,uchar day) {//c=0 为21世纪,c=1 为19世纪 输入输出数据均为BCD数据 uchar temp1,temp2; temp1=year/16; //BCD->hex 先把数据转换为十六进制 temp2=year%16; year=temp1*10+temp2; temp1=month/16; temp2=month%16; month=temp1*10+temp2; temp1=day/16; temp2=day%16; day=temp1*10+temp2; if (c==0){year+=0x64;} //如果为21世纪,年份数加100 temp1=year/0x4; //所过闰年数只算1900年之后的 temp2=year+temp1; temp2=temp2%0x7; //为节省资源,先进行一次取余,避免数大于0xff,避免使用整型数据 temp2=temp2+day+table_week[month-1]; if (year%0x4==0&&month<3)temp2-=1; week=temp2%0x7; } //test uchar c_sun,year_sun,month_sun,day_sun; void main() { c_sun=1; year_sun=0x2; month_sun=0x11; day_sun=0x3; Conver_week(c_sun,year_sun,month_sun,day_sun); Conversion(c_sun,year_sun,month_sun,day_sun); while(1); }

单片机的power-down 和idle模式,请解释一下?

它们都是单片机的低功耗运行方式. power-down也就是掉电工作模式,你一但进入了掉电模式,单片机内部的振荡器就会停止工作,也就是说.时钟被冻结了,这时所有功能都无法实现,但有一点,芯片内部RAM的内容是保持不变的.什么功能都被冻结,功耗当然小,此时,只要用2V左右的电源就可以了,耗电电流也降到了微安级. idle也就是待机模式,进入该模式,片内振荡器并没被冻结,冻结的是CPU,时钟信号依然能提供给中断逻辑,串行口和定时器,由于中断逻辑没被冻结,所以只要有任何一个允许的中断请求被响应,芯片内部马上强制退出待机模式,进入中断服务. 我们是通过改写特殊功能寄存器PCON的控制字来进入掉电和待机模式的,PCON.0和PCON.1分别代表idle和powerdown,今它们置1即可~~~

单片机没有BOOL值?

这个叫sbit或者bit

dig在单片机的C语言中的意思?

在单片机的C语言中,dig通常不是一个关键字或预定义的标识符,因此没有特定的含义。通常情况下,根据程序的上下文和具体的代码实现,dig可能是作为自定义变量名、函数名或宏定义等来使用的。因此,要了解dig在特定程序中的具体含义,需要查看程序的代码。
 首页 上一页  15 16 17 18 19 20 21 22 23 24  下一页  尾页