ImageVerifierCode 换一换
格式:DOCX , 页数:55 ,大小:24.62KB ,
资源ID:4684973      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4684973.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(51c程序集51单片机基本应用全集.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

51c程序集51单片机基本应用全集.docx

1、51c程序集51单片机基本应用全集 51单片机程序延时函数晶振频率12MHZ#include#include#define uint unsigned int#define uchar unsigned charVoid delay();/15usvoid delay(uint n) while(n-);void delay_nms(uint n) uint x,y; for(x=0;xn;x+) for(y=0;y120;y+);void main() _nop_();/1us delay(1);/25us delay(2);/34us delay(3);/43us delay(5);/61

2、us delay(10);/106us delay(50);/466us delay(100);/916us Delay(1000);/9019us delay_nms(1);/,991us delay_nms(10);/9,675us delay_nms(100);/97,515us while(1);1:/*- 名称:流水灯 内容:循环点亮P1口对应的8个LED灯,造成循环流水点亮的效果-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define uchar unsigned char#define uint unsigned int/*- 延时子

3、程序-*/void delay(uint cnt) while(-cnt);/*- 主函数-*/main() P1=0xfe; /给初始化值 换算成二进制是1111 1110 while(1) delay(58000);/延时程序 P1=1; /左移一位 该语句等效于 P1=P11 P1|=0x01; /最后一位补1,该语句等效于 P1=P1|0x01 符号|表示或 if(P1=0x7f) /检测是否移到最左端?=表示检测符号2端的值是否相等 delay(58000); P1=0xfe; /重新赋值 2:#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#def

4、ine uchar unsigned char#define uint unsigned int/*- 延时子程序-*/void delay(uint cnt) while(-cnt);/*- 主函数-*/main() P1=0xff; /给初始化值 换算成二进制是1111 1110 while(1) delay(58000); P1=0xaa; delay(58000); P1=0x55; 3/*调用位移函数的流水灯程序*/#include#include #define uint unsigned int #define uchar unsigned char uchar temp,num

5、,num1;void delay(uint z) uint x,y; for(x=z;x0;x-) for(y=110;y0;y-); void main() temp=0xfe; while(1) P1=temp; delay(100); temp=_crol_(temp,1);/重要的51库函数调用 delay(100); 4: /*- 名称:喇叭 内容:一般现象可以看到P1口LED闪烁,需要将该口通过杜邦线连接到喇叭信号输入端子,可以参考电路图或者说明书-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit SPK=P15; /定义喇叭端口/*/

6、* 延时函数声明 */*/void delay(unsigned int cnt) while(-cnt);/*/* 主函数 */*/main()unsigned int i; while(1) for(i=0;i200;i+)/喇叭发声的时间循环,改变大小可以改变发声时间长短 delay(50); /参数决定发声的频率,估算值,可以自行更改参数并 SPK=!SPK; SPK=1; /喇叭停止工作,间歇的时间,可更改 delay(20000); 5:/*- 名称:音乐播放 修改:无 内容:-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit spea

7、ker=P15; /定义音乐输出端口,需要连接到对应的喇叭,请参考电路图unsigned char timer0h,timer0l,time; /世上只有妈妈好数据表code unsigned char sszymmh= 6,2,3, 5,2,1, 3,2,2, 5,2,2, 1,3,2, 6,2,1, 5,2,1, 6,2,4, 3,2,2, 5,2,1, 6,2,1, 5,2,2, 3,2,2, 1,2,1, 6,1,1, 5,2,1, 3,2,1, 2,2,4, 2,2,3, 3,2,1, 5,2,2, 5,2,1, 6,2,1, 3,2,2, 2,2,2, 1,2,4, 5,2,3,

8、3,2,1, 2,2,1, 1,2,1, 6,1,1, 1,2,1, 5,1,6, 0,0,0 ; / 音阶频率表 高八位code unsigned char FREQH= 0xF2,0xF3,0xF5,0xF5,0xF6,0xF7,0xF8, 0xF9,0xF9,0xFA,0xFA,0xFB,0xFB,0xFC,0xFC, /1,2,3,4,5,6,7,8,i 0xFC,0xFD,0xFD,0xFD,0xFD,0xFE, 0xFE,0xFE,0xFE,0xFE,0xFE,0xFE,0xFF, ; / 音阶频率表 低八位code unsigned char FREQL= 0x42,0xC1,0

9、x17,0xB6,0xD0,0xD1,0xB6, 0x21,0xE1,0x8C,0xD8,0x68,0xE9,0x5B,0x8F, /1,2,3,4,5,6,7,8,i 0xEE,0x44, 0x6B,0xB4,0xF4,0x2D, 0x47,0x77,0xA2,0xB6,0xDA,0xFA,0x16, ;/*/* 延时函数 */*/void delay(unsigned char t) unsigned char t1; unsigned long t2; for(t1=0;t1t;t1+) for(t2=0;t28000;t2+) ; TR0=0; /*/* 定时器中断函数 */*/voi

10、d t0int() interrupt 1 TR0=0; speaker=!speaker; TH0=timer0h; TL0=timer0l; TR0=1; /*/* 音乐处理函数 */*/void song() TH0=timer0h; TL0=timer0l; TR0=1; delay(time); /*/* 主函数 */*/ void main(void) unsigned char k,i; TMOD=1; /置CT0定时工作方式1 EA=1; ET0=1;/IE=0x82 /CPU开中断,CT0开中断 while(1) i=0; while(i100) /音乐数组长度 ,唱完从头再

11、来 k=sszymmhi+7*sszymmhi+1-1; timer0h=FREQHk; timer0l=FREQLk; time=sszymmhi+2; i=i+3; song(); 6:步进电机的简单应用#include#define uint unsigned int#define uchar unsigned charuchar code ffw=0xf1,0xf3,0xf2,0xf6,0xf4,0xfc,0xf8,0xf9;void delayus(uint us) uint i,j; for(j=0;jus;j+) for(i=0;i12;i+); void main() ucha

12、r i; while(1) for(i=0;i8;i+) P1=ffwi; delayus(10); 7:独立按键控制继电器#includesbit jdq=P10;sbit key1=P30;sbit key2=P31;void delay(unsigned int a)while(a-);void main() jdq=0; while(1) if(key1=0) jdq=1; /delay(5000); if(key2=0) jdq=0; /delay(5000); 8:数码管的静动显示及简单独立按键的使用#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

13、unsigned char const EL=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; / 显示段码值01234567unsigned char code seg=0,1,2,3,4,5,6,7;/分别对应相应的数码管点亮,即位码sbit key1=P30;sbit key2=P31;sbit key3=P32;sbit key4=P33;/*- 延时子程序-*/void delay(unsigned int cnt) while(-cnt);void main() unsigned char i; i=0; P3=0XFF; whi

14、le(1) P0=0X06; P2=0; delay(100); P0=0X5b; P2=1; delay(100); P0=0X4f; P2=2; delay(100); P0=0X66; P2=3; delay(100); P0=0X6d; P2=4; delay(100); P0=0X7d; P2=5; delay(100); P0=0X07; P2=6; delay(100); P0=0X7f; P2=7; delay(100); if(key1=0) break; while(1) if(key1=0) delay(100); if(key1=0) P0=EL0; P2=0; if(

15、key2=0) delay(100); if(key2=0) P0=EL1; P2=0; if(key3=0) delay(100); if(key3=0) P0=EL2; P2=0; if(key4=0) delay(100); if(key4=0) P0=EL3; P2=0; 9:/*-矩阵键盘实验程序 通过反转法循环扫描矩阵键盘,并通过数码管显示数据-*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义#define uchar unsigned char#define uint unsigned intunsigned char const EL=0x

16、3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f, 0x77,0x7c,0x39,0x5e,0x79,0x71;/0-F/*- 函数声明-*/ uchar keyscan(void);/键盘扫描void delay(uint i); /演示程序/*- 主函数-*/void main() uchar key; P2=0; /1数码管亮 按相应的按键,会显示按键上的字符 P0=0X00; while(1) key=keyscan(); /调用键盘扫描, switch(key) case 0xee:P0=EL0;break;/0按下相应的键显示相对应的码

17、值 case 0xde:P0=EL1;break;/1 按下相应的键显示相对应的码值 case 0xbe:P0=EL2;break;/2 case 0x7e:P0=EL3;break;/3 case 0xed:P0=EL4;break;/4 case 0xdd:P0=EL5;break;/5 case 0xbd:P0=EL6;break;/6 case 0x7d:P0=EL7;break;/7 case 0xeb:P0=EL8;break;/8 case 0xdb:P0=EL9;break;/9 case 0xbb:P0=EL10;break;/a case 0x7b:P0=EL11;brea

18、k;/b case 0xe7:P0=EL12;break;/c case 0xd7:P0=EL13;break;/d case 0xb7:P0=EL14;break;/e case 0x77:P0=EL15;break;/f /*- 键盘扫描程序-*/uchar keyscan(void) /键盘扫描函数,使用行列反转扫描法 uchar cord_h,cord_l;/行列值中间变量 P3=0x0f; /行线输出全为0 cord_h=P3&0x0f; /读入列线值 if(cord_h!=0x0f) /先检测有无按键按下 delay(100); /去抖 if(cord_h!=0x0f) cord_

19、h=P3&0x0f; /读入列线值 P3=cord_h|0xf0; /输出当前列线值/当时还是按住的实际P3=11101110。结合实际按键 cord_l=P3&0xf0; /读入行线值 return(cord_h+cord_l);/键盘最后组合码值 return(0xff); /返回该值/*- 延时程序-*/void delay(uint i) /延时函数while(i-);10:(1)/*外部中断0/1的简单应用*/#include /包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit speaker=P00;#define uchar unsigned char#de

20、fine uint unsigned int/*- 延时子程序-*/void delay(uint cnt) while(-cnt);/*- 主函数-*/main() EA=1;/开总中断 /EX0=1;/开外部中断0 /IT0=1; EX0=1; TCON=0x01;/跳变出发设置/ EX1=1;TCON=0x05; P1=0xfe; /给初始化值 换算成二进制是1111 1110 while(1) delay(58000);/延时程序 P1=1; /左移一位 该语句等效于 P1=P11 P1|=0x01; /最后一位补1,该语句等效于 P1=P1|0x01 符号|表示或 if(P1=0x7f) /检测是否移到最左端?=表示检测符号2端的值是否相等 delay(58000); P1=0xfe; /重新赋值 void exter1() interrupt 1 uint i; while(1) for(i=0;i2000;i+) speaker=0; delay(20000); speaker=1; delay(20000); (2)外部中断0的简单配置应用#inc

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1