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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

单片机各模块例程.docx

1、单片机各模块例程 单片机 常用模块及例程 2012.5.25 1、模块电路图:源程序:1、流水灯#include #define uint unsigned intvoid delay (uint z) uint x,y; for(x=z;x0;x-) for(y=200;y0;y-);void main() P1=0xfe; delay(110); P1=1; P1|=0x01; if(P1=0xf7) P1=0xfe; delay(110); 2、跑马灯#include #define uint unsinged intvoid delay(int z) int x,y; for(x=z;

2、x0;x-) for(y=110;y0;y-);void main() P1=0xfe; while(1) delay(50); P1=P11; if(P1=0x80) delay(50); P1=0xfe; 3、数码管部分#include#define uint unsigned int#define uchar unsigned charsbit duan=P20;sbit wei=P21;uchar dat=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void delay(int x)while(x-);void display(i

3、nt shi,int ge) P0=0xff; duan=1; P0=datshi; /shi duan=0; P0=0 ; wei=1; P0=4; wei=0; delay(100); P0=0xff; duan=1; P0=datge; /ge duan=0; P0=0 ; wei=1; P0=8; wei=0; delay(100); main() int y,qian,bai,shi,ge; y=4567; shi=y%100/10; ge=y%10; while(1)display(qian,bai,shi,ge); 4、矩阵键盘部分#include #define uchar u

4、nsigned char#define uint unsigned intuchar c,m,n;sbit dula=P26;sbit wela=P27; uchar code table10 = 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;void delay(uint t) while(t-);unsigned char panduan(void) int i,j; P3=0x0f; if(P3!=0x0f) delay(5); if(P3!=0x0f) for(i=1;i=1; P3=0xf0; for(j=1;j=4;j+) if

5、(!P3&0x80) break; P3= 1;i+); P3 = 0xf0; for(temp = (P3|0x0f),j=1;temp = 1;j+); P3 = 0xff; return 4*j+i-3; P3 = 0xff; return 0; )void display(int m,int n) P0=0xff; dula=1; P0=tablen; dula=0; P0=0; wela=1; P0=0x80; wela=0; delay(3); P0=0xff; dula=1; P0=tablem; dula=0; P0=0; wela=1; P0=0x40; wela=0; de

6、lay(3);void main() while(1) c=panduan(); m=c/10; n=c%10; display(m,n); 5、中断-时间中断#include sbit Duanxuan=P20;sbit Weixuan=P21;Unsigned char Shuma_code10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;unsigned char Wei4=0x01,0x02,0x04,0x08;void Display(void) static unsigned char i; P0=0x00; /位选清零 防止

7、重影 Weixuan =1; Weixuan=0; P0=Shuma_codei+4; /此处可做显示的修改修改 Duanxuan=1; Duanxuan=0; P0=Weii; / 位选 Weixuan=1; Weixuan=0; i+; if(i=4)i=0;void Timer0_int(void) interrupt 1/两毫秒*修改2000可修改中断时间 TH0=(65536-2000)/256; /重新赋值 2ms TL0=(65536-2000)%256; Display();void Init_Timer0(void) /初始化 TMOD |= 0x01; /使用模式1,16位

8、定时器,使用|符号可以在使用多个定时器时不受影响 TH0=0x00; /给定初值 TL0=0x00; EA=1; /总中断打开 ET0=1; /定时器中断打开 TR0=1; /定时器开关打开 main (void) Init_Timer0(); while(1) ;/写入主体函数外部中断#includemain() P0=0x55; EA=1; EX0=1; IT0=1; while(1);void ex0() interrupt 0 P0=P0;6.直流电机#include#define uint unsigned int#define uchar unsigned charsbit key

9、=P17;sbit keygnd=P10;sbit pwm=P20;sbit pwmgnd=P21;uchar pwmon,num,circle,cnt;void delay(uchar x) while(x-);void keyscan() if(!key) delay(1000); if(!key) num+; if(num=5) num=0; void init() TMOD|=0x01; TH0=(65536-1000)/256; TL0=(65536-1000)%256; EA=1; ET0=1; TR0=1;main() circle=10; cnt=0; num=0; pwm=0

10、; pwmgnd=0;keygnd=0; init(); while(1) keyscan(); switch(num) case 1: pwmon=2;break; case 2: pwmon=4;break; case 3: pwmon=6;break; case 4: pwmon=8;break; void Timer0() interrupt 1 TH0=(65536-1000)/256; TL0=(65536-1000)%256; if(cnt=pwmon) pwm=0; if(cnt=circle) cnt=0; pwm=1; cnt+;6、蜂鸣器模块#includesbit SP

11、K=P10;/定义蜂鸣器端口void delay(unsigned int cnt)/延时 while(-cnt);main() unsigned int i; while(1) for(i=0;i200;i+)/喇叭发声的时间循环,改变大小可以改变发声时间长短 delay(80);/参数决定发声的频率,估算值 SPK=!SPK; SPK=1; /喇叭停止工作,间歇的时间,可更改 delay(20000); 7、继电器用杜邦线把继电器输入端口和P1.1连接起来 按键s1吸合 s2释放继电器*/#include sbit key1=P30;/定义按键位置sbit key2=P31;/定义按键位置

12、sbit RELAY = P32;/继电器void delay(unsigned int cnt) /延时 while(-cnt); main() RELAY=0;/初始化 while(1) if(!key1) /按下相应的按键 delay(5000); /去抖 if(!key1) /去抖后是否按下相应的按键 RELAY=1; /继电器吸合 if(!key2) /按下相应的按键 delay(5000);/去抖 if(!key2) /去抖后是否按下相应的按键 RELAY=0; /继电器释放 8、IIC协议#include#define uchar unsigned charsbit sda=P2

13、0; /位定义sbit scl=P21;uchar a;void delay() ; void start() /开始信号 sda=1; /时钟线为高时,数据线由低到高的变化为开始 delay(); scl=1; delay(); sda=0; delay();void stop() /停止 sda=0; /时钟先为高时,数据线由低到高的变化为结束 delay(); scl=1; delay(); sda=1; delay();void respons() /应答 uchar i; scl=1; /在高电平时读取信号 delay(); while(sda=1)&(i250)i+; /检验收到信

14、号 scl=0; /关闭第九个时钟 delay();void init() /初始化 sda=1; /总线全部释放 delay(); scl=1; delay();void write_byte(uchar date) /写字节 uchar i,temp; temp=date; for(i=0;i8;i+) /读取8个字节 temp=temp1; /移动8位,读取最高位 scl=0; /时钟线拉低时,允许数据线变化 delay(); sda=CY; /最高位移入CY中 delay(); scl=1; /时钟线为高时,稳定数据 delay(); scl=0; /读取低电平信号 delay();

15、sda=1; delay();uchar read_byte() /读字节 uchar i,k; /k为0 scl=0; /时钟线拉低,允许数据线变化 delay(); sda=1; delay(); for(i=0;i8;i+) scl=1; /时钟线为高以稳定数据 delay(); k=(k0;a-) for(b=100;b0;b-);void write_add(uchar address,uchar date) /写地址 start(); write_byte(0xa0); /器件地址 respons(); write_byte(address); /器件内部存储器地址 respons

16、(); write_byte(date); /写字节 respons(); stop();uchar read_add(uchar address) /读地址 uchar date; start(); write_byte(0xa0); /读器件地址 respons(); write_byte(address); /读器件内部存储器地址 respons(); start(); /换方向读 write_byte(0xa1); /读下一个数据 respons(); date=read_byte(); stop(); return date;void main() init(); write_add

17、(23,0xaa); / delay1(100); P3=read_add(23); / 把读到的数据显示出来 while(1);9、AD转换include#define uint unsigned int#define uchar unsigned charsbit sda=P20;sbit scl=P21;sbit duan=P22;sbit wei=P23;uchar x1,x2,x3,x4,x5,x6,x7,x8;uchar dat=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90 ;void delay();void delayx(u

18、char x)while(x-);void init() sda=1; delay(); scl=1; delay();void start() sda=1; delay(); scl=1; delay(); sda=0; delay();void stop() sda=0; delay(); scl=1; delay(); sda=1; delay();void ack() uchar i; scl=1; delay(); if(sda=1)&(i250) i+; delay(); scl=0; delay();void writebyte(uchar dat) uchar i; for(i

19、=0;i8;i+) scl=0; delay(); dat=dat1; sda=CY;delay(); scl=1; delay(); scl=0; delay(); sda=1; delay();uchar readbyte() uchar i,dat; scl=0; delay(); sda=1; delay(); for(i=0;i8;i+) scl=1; delay(); dat=dat1; if(sda) dat+; delay(); scl=0; delay(); return dat;void writeEEPROM(uchar add,uchar dat) start(); w

20、ritebyte(0xa0); ack(); writebyte(add); ack(); writebyte(dat); ack(); stop();uchar readEEPROM(uchar add) uchar temp; start(); writebyte(0xa0); ack(); writebyte(add); ack(); start(); writebyte(0xa1); ack(); temp=readbyte() ; stop(); return temp;uchar readadc(uchar chl) uchar temp; start(); writebyte(0

21、x90); ack(); writebyte(0x40|chl); ack(); start(); writebyte(0x91); ack(); temp=readbyte() ; stop(); return temp;void display(uchar x1,uchar x2,uchar x3,uchar x4,uchar x5,uchar x6,uchar x7,uchar x8) P1=0xff; duan=1; P1=datx1; duan=0; P1=0; wei=1; P1=0x01; wei=0; delayx(100); P1=0xff; duan=1; P1=datx2

22、; duan=0; P1=0; wei=1; P1=0x02; wei=0; delayx(100); P1=0xff; duan=1; P1=datx3; duan=0; P1=0; wei=1; P1=0x04; wei=0; delayx(100); P1=0xff; duan=1; P1=datx4; duan=0; P1=0; wei=1; P1=0x08; wei=0; delayx(100); P1=0xff; duan=1; P1=datx5; duan=0; P1=0; wei=1; P1=0x10; wei=0; delayx(100); P1=0xff; duan=1;

23、P1=datx6; duan=0; P1=0; wei=1; P1=0x20; wei=0; delayx(100); P1=0xff; duan=1; P1=datx7; duan=0; P1=0; wei=1; P1=0x40; wei=0; delayx(100); P1=0xff; duan=1; P1=datx8; duan=0; P1=0; wei=1; P1=0x80; wei=0; delayx(100);void zhuanhuan() float temp; temp=readadc(0); / delayx(1000); x1=(int)temp/1000; x2=(in

24、t)temp%1000/100; x3=(int)temp%100/10; x4=(int)temp%10;main() init(); writeEEPROM(23,0x55); delayx(1000); P3=readEEPROM(23); while(1) P3=readadc(0); zhuanhuan(); display(x1,x2,x3,x4,x5,x6,x7,x8);display(x1,x2,x3,x4,x5,x6,x7,x8); 10、18B20单线温度检测#include#define uchar unsigned char#define uint unsigned i

25、nt;sbit seg1=P20;sbit seg2=P21;sbit seg3=P22;sbit DQ=P30; /ds18b20 端口uchar temp;uchar flag_get,count,num,minute,second;uchar code tab=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/7段数码管段码表共阳uchar str3;void delay1(uchar MS);unsigned char ReadTemperature(void);void Init_DS18B20(void);unsigned char ReadOneChar(void);void WriteOneChar(un

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2