完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.学习了简单延时程序
让灯光闪烁,程序小改进 #include ***it p1_1=P1^0;//要定义口 unsigned int a;//范围要注意0-65535 void main() { while(1)//大循环用这个包住 { a=51000;//第一次赋值 p1_1=0;//低电平会亮 while(a--);//亮,并且延时 p1_1=1;//高电平会灭 a=51000;//再次赋值 while(a--);//再延时,让灯再亮久一点,这个是比较简单低级,也不好控制延时时间的延时间的写法 } } 2.调试程序 全速执行程序时会在断点停下来,断点的语句不会执行,黄色箭头对应的语句要再点一次才会执行 3.仿真 模拟时XTAL的设置和软件仿真用时有关系,但是硬件不影响,程序对就行 单片机运行速度由内部晶振决定 2.子程序的调用 1.例子程序(下面是郭天祥的例子,作用结果是让灯光闪烁1s,我while语句的使用在上一个流水灯的CSDN中链接) #include ***it p1_1=P1^0;//要定义口 unsigned int a;//范围要注意0-65535 void main() { while(1)//大循环用这个包住 { a=51000;//第一次赋值 p1_1=0;//低电平会亮 while(a--);//亮,并且延时 a=51000;//再次赋值 while(a--);//再延时,让灯再亮久一点,这个是比较简单低级,也不好控制延时时间的延时间的写法 p1_1=1;//给高电平,灭掉 a=51000;//第一次赋值 while(a--);//灭,并且延时 a=51000;//再次赋值 while(a--);//再延时,其实这里已经可以写成循环了 } } 2.调用不带参数子程序
void delay()//无参数(空阔号),无返回值(void)的子程序 { unit x,y;//x,y在子函数里面定义的变量叫局部变量,只是在子函数里面有用,主函数不认 for(x=100;x>0;x--) for(y=2000;y>0;y--);//for里面嵌套for不要忘记分号 } 完整程序 #include #define uint unsigned int//宏定义 #define uchar unsigned char ***it D1=P1^0; void delay();//声明,把函数名字、参数类型、返回值类型写上 void main() { while(1) { D1=0; delay();//调用子程序 D1=1; delay();//调用子程序 } } void delay()//无参数(空阔号),无返回值(void)的子程序 { uint x,y; for(x=100;x>0;x--) for(y=2000;y>0;y--);//for里面嵌套for不要忘记分号 } 注意:更改了程序后,要先编译再调试,要不然会报错 3.带参数子程序的设计 #include #define uint unsigned int #define uchar unsigned char ***it D1=P1^0; void delay(uint z);/*声明,把函数名字、参数类型(参数名可写可不写)、返回值类型写上 , 有多个参数,参数之间逗号隔开,只需要写参数类型*/ void main() { while(1) { D1=0; delay(200);//调用子程序,要给参数赋值,改的很方便 D1=1; delay(400);//亮暗时间不一样 } } void delay(uint z)//带参数(空括号里面有参数类型及参数名),无返回值(void)的子程序 { uint x,y; for(x=200;x>0;x--) for(y=z;y>0;y--);//for里面嵌套for不要忘记分号 } 4.C51函数库的方便调用 #include #include #define uint unsigned int #define uchar unsigned char uchar temp;//全局变量,赋值时变量的类型要和被赋值的值类型一样,P1口是八位寄存器,uchar也是八位 void delay(uint z);/*声明,把函数名字、参数类型(参数名可写可不写)、返回值类型写上 , 有多个参数,参数之间逗号隔开,只需要写参数类型*/ void main() { temp=0xfe;//11111110 P1=temp; while(1) { temp=_crol_(temp,1);//unsigned char _crol_(unsigned char a,unsigned char b),返回值(unsigned char型变量)给temp P1=temp; delay(600);//最开始第一个灯不亮,换一下二三句就会亮了 } } void delay(uint z)//带参数(空括号里面有参数类型及参数),无返回值(void)的子程序 { uint x,y; for(x=100;x>0;x--) for(y=z;y>0;y--);//for里面嵌套for不要忘记分号 } 蜂鸣器,p2^3=0时会响 下面这个也可以延时 #include void delay(unsigned int x) { unsigned char y; for(x;x>0;x--) for(y=240;y>0;y--); //延时x毫秒 } void main() { unsigned char code lsd[16]={ 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf, 0xdf,0xef,0xf7,0xfb,0xfd,0xfe}; unsigned char i; for(i=0;i<16;i++) { P1=lsd; delay(1000); } } 5.使用的硬件资源 1.I/O口工作,其连接了二极管 2.CPU工作,因为在调试程序的时候用了复位的功能 3.RAM,ROM工作,程序烧录到里面 4.特殊功能寄存器工作,我们要使用延时程序和循环左/右移的子程序,肯定会用到特殊功能寄存器 |
|
|
|
只有小组成员才能发言,加入小组>>
3263 浏览 9 评论
2944 浏览 16 评论
3443 浏览 1 评论
8955 浏览 16 评论
4036 浏览 18 评论
1079浏览 3评论
559浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
552浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2287浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1848浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-10 16:59 , Processed in 0.841364 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号