2025年单片机设计100例(单片机设计100例题)

单片机设计100例(单片机设计100例题)p 1 第一章 实例 1 使用累加器进行简单加法运算 MOVA 02H A2ADD A 06H AA 06H 实例 2 使用 B 寄存器进行简单乘法运算 MOVA 02H A2MOVB 06H B6MUL AB BAA B 6 2 实例 3 通过设置 RS1 RS0 选择工作寄存器区 1 CLR 0SETB 1 实例 4 使用数据指针 DPTR 访问外部数据数据存储器 MOV DPTR p

大家好,我是讯享网,很高兴认识大家。




讯享网

 <p >1、第一章【实例1】使用累加器进行简单加法运算:MOVA,#02H;A2ADD A,#06H;AA+06H【实例2】使用B寄存器进行简单乘法运算:MOVA,#02H; A2MOVB,#06H;B6MUL AB;BAA*B=6*2【实例3】通过设置RS1,RS0选择工作寄存器区1:CLR ;0SETB;1【实例4】使用数据指针DPTR访问外部数据数据存储器:MOV DPTR, #data16;DPTRdata16MOVXA, DPTR;A(DPTR)MOVXDPTR,A;(DPTR)A【实例5】使用程序计数器PC查表:MOV , #data ;dataMOVCA, A+DPTR;PC(PC)+1,A</p> <p >2、(A)+(PC)【实例6】if语句实例:void main()int a,b,c,min;printf(&quot;n please input three number:&quot;);scanf(&quot;%d%d%d &quot;,&amp;a,&amp;b,&amp;c);if(a&lt;b&amp;&amp;a&lt;c) printf(&quot;min=%dn&quot;,a );else if(b&lt;a&amp;&amp;b&lt;c) printf(&quot;min=%dn&quot;,b);else if(c&lt;a&amp;&amp;c&lt;c) printf</p> <p >3、(&quot;min=%dn&quot;,c);elseprintf(&quot;There at least two numbers are equaln&quot;);【实例7】switch-case语句实例:void main()int num;printf(&quot;input one number:&quot;);scanf(&quot;%d&quot;,&amp;num);switch(num)case 1:printf(&quot;num =%dn&quot;,num);break;case 2:printf(&quot;num =%dn&quot;,num);break;ca</p> <p >4、se 3:printf(&quot;num =%dn&quot;,num);break;case 4:printf(&quot;num =%dn&quot;,num);break; default:printf(&quot;The number is out of the rangen&quot;,num);【实例8】for语句实例:void main()for(int a=10;n&gt;0;a -)printf(&quot;%d&quot;,a);【实例9】while语句实例:void main()int i=0;while(i&lt;=10)i+;【实例10】dowhile语句实例:vo</p> <p >5、id main()int i=0;doi+;while(i&lt;=10);【实例11】语句形式调用实例:void main()int i=0;while(i&lt;=10)i+;Sum(); /*函数调用*/【实例12】表达式形式调用实例:void main()int a,b,i=0;while(i&lt;=10)i+;i=4*Sum(a,b); /*函数调用*/【实例13】以函数的参数形式调用实例:void main()int a,b,c,i=0;while(i&lt;=10)i+;i=max(c,Sum(a,b); /*函数调用*/【实例14】函数的声明实例:void main()int</p> <p >6、 max(int x,int y); /*函数的声明*/int a,b,c,i=0;while(i&lt;=10)i+;i=max(c,Sum(a,b); /*函数调用*/【实例15】函数递归调用的简单实例:void fun()int a=1, result,i;for(i=0;i&lt;10;) i=a+I;result =fun(); /*函数调用*/ return result;【实例16】数组的实例:void main()char num33=,#,,#,#,,#,; /*定义多维数组*/int i=0,j=0; for(;i&lt;3;i+) for(;j&lt;3;j+) prin</p> <p >7、tf(“%c”,numij);printf(“/n”);【实例17】指针的实例:void main()int a=3,*p;p=&amp;a;/*将变量a的地址赋值给指针变量p*/printf(“%d,%d”,a,*p); /*输出二者的数值进行对比*/【实例18】数组与指针实例:void main()int i=3,num3=1,2,3,*p; p=num;/*将数组num的地址赋值给指针变量p*/result =max(p,3); /*函数调用,计算数组的最大值*/【实例19】P1口控制直流电动机实例sfr p1=0x90;sbit p10=p10;sbit p11=p11;void ma</p> <p >8、in ()int i, m;int j=100;int k=20;/ 正快转for (i=0; i&lt;100; i+)P10=1;for (j=0; j&lt;50; j+) m=0; P10=0;for (j=0; j&lt;10; j+) m=0 /正慢转for (i=0; i&lt;100; i+)P10=1;for (j=0; j&lt;10; j+) m=0 p10=0;for (j=0; j&lt;50; j+) m=0/ 负快转for (i=0; i&lt;100; i+)p11=1;for (j=0; j&lt;50; j+) m=0; p11=0;for (j=0; j&</p> <p >9、lt;10; j+) m=0; / 负慢转for (i=0; i&lt;100; i+)p11=1;for (j=0;j&lt;10;j+) m=0; p11=0for (j=0; j&lt;50; j+) m=0; 第二章【实例20】用74LS165实现串口扩展并行输入口(1)函数声明管脚定义/-库函数声明,管脚定义-#include&lt;reg52.h&gt;sbit LOAD=P17;/用P17控制SH/ 管脚(2)串口初始化函数UART_init()/-/ 函数名称:UART_init()/ 功能说明:串口初始化,设定串口工作在方式0/-void UART_init(void) SC</p> <p >10、ON=0x10; /设串行口方式0,允许接收,启动接收过程 ES=0; /禁止串口中断(3)数据接收函数PA()/-/ 函数名称:PA()/ 输入参数:无/ 输出参数:返回由并口输入的数据/ 功能说明:接收八位串行数据/-unsigned char PA(void) unsigned char PA_data; LOAD=0; /当P1.7输出低电平,74LS165将并行数据装入寄存器/当中 LOAD=1; /当P1.7输出高电平,74LS165在时钟信号下进行移位 UART_init(); /74LS165工作在时钟控制下的串行移位状态 while(RI=0); /循环等待 RI=0; PA</p> <p >11、_data=SBUF; return PA_data; /返回并行输入的数据(1)函数声明管脚定义/-库函数声明,管脚定义-#include&lt;reg52.h&gt;sbit a7=ACC7;sbit simuseri_CLK=P16;/用P16模拟串口时钟sbit simuseri_DATA=P15;/用P15模拟串口数据sbit drive74165_LD=P17;/用P17控制SH/ 管脚(2)数据输入函数in_simuseri()/-/ 函数名称:in_simuseri()/ 输入参数:无/ 输出参数:data_buf/ 功能说明:8位同位移位寄存器,将simuseri_DATA串</p> <p >12、行输入的数据按从低位到/ 高位/ 保存到data_buf/-unsigned char in_simuseri(void) unsigned char i; unsigned char data_buf; i=8; do ACC=ACC&gt;&gt;1; for(;simuseri_CLK=0;); a7= simuseri_DATA; for(;simuseri_CLK=1;); while(-i!=0); simuseri_CLK=0; data_buf=ACC; return(data_buf);(3)数据输出函数PAs()/-/ 函数名称:PAs()/ 输入参数:无/ 输出参数:PA</p> <p >13、s _buf,返回并行输入74LS165的数据/ 功能说明:直接调用,即可读取并行输入74LS165的数据,不需要考虑74LS165的/ 工作原理/-unsigned char PAs(void) unsigned char PAs_buf; drive74165_LD=0; drive74165_LD=1; PAs_buf= in_simuseri(); return(PAs_buf);【实例21】用74LS164实现串口扩展并行输出口单片机串口驱动74LS164的程序主要包括函数声明管脚定义部分、串口初始化函数以及数据发送函数。(1)函数声明管脚定义/-库函数声明,管脚定义-#includ</p> <p >14、e &lt;reg52.h&gt;sbit CLR=P17;/用P17控制CLR(2)串口初始化函数UART_init()/-/ 函数名称:UART_init()/ 功能说明:串口初始化,设定串口工作在方式0/-void UART_init(void) SCON =0x00; /没串行口方式0,允许发送,启动发送过程 ES=0; / 禁止串口中断(3)数据发送函数PA_out()/-/ 函数名称:PA_out()/ 输入参数:PA_data,需要从74LS164并行口输出的数据/ 输出参数:无/ 功能说明:发送八位串行数据至并口/-void PA_out(unsigned char PA_da</p> <p >15、ta) CLR=0; /并口输出清零 CLR=1; /开始串行移位 UART_init(); /74LS165工作在时钟控制下的串行移位状态 while(TI=0); /循环等待 TI=0; SBUF=PA_data;单片机I/O端口驱动74LS164主要包括函数声明管脚定义部分、数据输入函数以及数据输出函数。(1)函数声明管脚定义/-库函数声明,管脚定义-#include &lt;reg52.h&gt;sbit simuseri_CLK=P16;/用P16模拟串口时钟sbit simuseri_DATA=P15;/用P15模拟串口数据sbit drive74164_CLR=P17;/用P17</p> <p >16、控制CLRsbit a0=ACC0;(2)数据输入函数out_simuseri ()/-/ 函数名称:out_simuseri/ 输入参数:data_buf/ 输出参数:无/ 功能说明:8位同步移位寄存器,将data_buf的数据逐位输出到simuseri_DATA/-void out_simuseri(char data_buf) char i; i=8; ACC=data_buf; do simuseri_CLK=0; simuseri_DATA=a0; simuseri_CLK=1; ACC=ACC&gt;&gt;1; while(-i!=0); simuseri_CLK=0;(3)数据</p> <p >17、输出函数PA_out ()/-/ 函数名称:PA_out/ 输入参数:Pseri_out,需要输出的8位数据/ 输出参数:无/ 功能说明:将Pseri_out中的数据送到74165并行口A-G输出/-void PA_out (char Pseri_out ) drive74164_CLR =0; /并口输出清零 drive74164_CLR =1; /开始串行移位 out_simuseri(Pseri_out);【实例22】P0 I/O扩展并行输入口I/O口对应的地址为:1111 1110 1111 1111 B=FEFFHCPU操作指令为:#define 244_addr xbyte0XFEFFunsigned char I/O_DATA;I/O_DATA=244_addr;【实例23】P0 I/O扩展并行输出口I/O端口对应的地址为:1111 1101 1111 1111 B=FDFFHCPU操作指令为:#define 273_addr xbyte0XFDFFunsigned char I/O_DATA;244_addr =I/O_DATA;【实例24】用8243扩展I/O端口#include&lt;reg52.h&gt;sbit ContrBit0=P10;sbit ContrBit1=P11;sbit ContrBit2=P12</p> 

讯享网
小讯
上一篇 2025-05-25 21:03
下一篇 2025-04-22 23:21

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/145221.html