单片机各模块例程Word文档格式.docx

上传人:b****2 文档编号:4487230 上传时间:2023-05-03 格式:DOCX 页数:44 大小:656.79KB
下载 相关 举报
单片机各模块例程Word文档格式.docx_第1页
第1页 / 共44页
单片机各模块例程Word文档格式.docx_第2页
第2页 / 共44页
单片机各模块例程Word文档格式.docx_第3页
第3页 / 共44页
单片机各模块例程Word文档格式.docx_第4页
第4页 / 共44页
单片机各模块例程Word文档格式.docx_第5页
第5页 / 共44页
单片机各模块例程Word文档格式.docx_第6页
第6页 / 共44页
单片机各模块例程Word文档格式.docx_第7页
第7页 / 共44页
单片机各模块例程Word文档格式.docx_第8页
第8页 / 共44页
单片机各模块例程Word文档格式.docx_第9页
第9页 / 共44页
单片机各模块例程Word文档格式.docx_第10页
第10页 / 共44页
单片机各模块例程Word文档格式.docx_第11页
第11页 / 共44页
单片机各模块例程Word文档格式.docx_第12页
第12页 / 共44页
单片机各模块例程Word文档格式.docx_第13页
第13页 / 共44页
单片机各模块例程Word文档格式.docx_第14页
第14页 / 共44页
单片机各模块例程Word文档格式.docx_第15页
第15页 / 共44页
单片机各模块例程Word文档格式.docx_第16页
第16页 / 共44页
单片机各模块例程Word文档格式.docx_第17页
第17页 / 共44页
单片机各模块例程Word文档格式.docx_第18页
第18页 / 共44页
单片机各模块例程Word文档格式.docx_第19页
第19页 / 共44页
单片机各模块例程Word文档格式.docx_第20页
第20页 / 共44页
亲,该文档总共44页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

单片机各模块例程Word文档格式.docx

《单片机各模块例程Word文档格式.docx》由会员分享,可在线阅读,更多相关《单片机各模块例程Word文档格式.docx(44页珍藏版)》请在冰点文库上搜索。

单片机各模块例程Word文档格式.docx

3、数码管部分

#include<

#defineucharunsignedchar

sbitduan=P2^0;

sbitwei=P2^1;

uchardat[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

voiddelay(intx)

{while(x--);

voiddisplay(intshi,intge)

P0=0xff;

duan=1;

P0=dat[shi];

//shi

duan=0;

P0=0;

wei=1;

P0=4;

wei=0;

delay(100);

duan=1;

P0=dat[ge];

//ge

P0=8;

main()

inty,qian,bai,shi,ge;

y=4567;

shi=y%100/10;

ge=y%10;

while

(1)display(qian,bai,shi,ge);

4、矩阵键盘部分

ucharc,m,n;

sbitdula=P2^6;

sbitwela=P2^7;

ucharcodetable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

voiddelay(uintt)

while(t--);

unsignedcharpanduan(void)

inti,j;

P3=0x0f;

if(P3!

=0x0f)

delay(5);

=0x0f){

for(i=1;

i<

=4;

i++)

{

if(!

P3&

0x01)break;

P3>

>

}

P3=0xf0;

for(j=1;

j<

j++)

0x80)break;

P3<

P3=0xff;

return4*(j-1)+i;

P3=0xff;

return0;

}

另:

((unsignedcharpanduan(void)

unsignedchari,j,temp;

P3=0x0f;

=0x0f){

delay(5);

if(P3!

for(temp=~(P3|0xf0),i=0;

temp>

=1;

i++);

P3=0xf0;

for(temp=~(P3|0x0f),j=1;

temp<

j++);

P3=0xff;

return4*j+i-3;

P3=0xff;

}))

voiddisplay(intm,intn)

dula=1;

P0=table[n];

dula=0;

P0=0;

wela=1;

P0=0x80;

wela=0;

delay(3);

P0=table[m];

P0=0x40;

{while

(1)

{

c=panduan();

m=c/10;

n=c%10;

display(m,n);

5、中断-时间中断

reg51.h>

sbitDuanxuan=P2^0;

sbitWeixuan=P2^1;

UnsignedcharShuma_code[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

unsignedcharWei[4]={0x01,0x02,0x04,0x08};

voidDisplay(void)

staticunsignedchari;

P0=0x00;

//位选清零防止重影

Weixuan=1;

Weixuan=0;

P0=Shuma_code[i+4];

//此处可做显示的修改修改

Duanxuan=1;

Duanxuan=0;

P0=Wei[i];

//位选

Weixuan=1;

i++;

if(i==4)i=0;

voidTimer0_int(void)interrupt1//两毫秒****修改2000可修改中断时间

TH0=(65536-2000)/256;

//重新赋值2ms

TL0=(65536-2000)%256;

Display();

voidInit_Timer0(void)//初始化

TMOD|=0x01;

//使用模式1,16位定时器,使用"

|"

符号可以在使用多个定时器时不受影响

TH0=0x00;

//给定初值

TL0=0x00;

EA=1;

//总中断打开

ET0=1;

//定时器中断打开

TR0=1;

//定时器开关打开

main(void)

Init_Timer0();

{;

}//写入主体函数

外部中断

main()

P0=0x55;

EX0=1;

IT0=1;

while

(1);

voidex0()interrupt0

P0=~P0;

6.直流电机

sbitkey=P1^7;

sbitkeygnd=P1^0;

sbitpwm=P2^0;

sbitpwmgnd=P2^1;

ucharpwmon,num,circle,cnt;

voiddelay(ucharx)

while(x--);

voidkeyscan()

if(!

key)

delay(1000);

num++;

if(num==5)num=0;

voidinit()

TMOD|=0x01;

TH0=(65536-1000)/256;

TL0=(65536-1000)%256;

circle=10;

cnt=0;

num=0;

pwm=0;

pwmgnd=0;

keygnd=0;

init();

keyscan();

switch(num)

case1:

pwmon=2;

break;

case2:

pwmon=4;

case3:

pwmon=6;

case4:

pwmon=8;

voidTimer0()interrupt1

if(cnt==pwmon)

if(cnt==circle)

pwm=1;

cnt++;

6、蜂鸣器模块

sbitSPK=P1^0;

//定义蜂鸣器端口

voiddelay(unsignedintcnt)//延时

while(--cnt);

unsignedinti;

for(i=0;

200;

i++)//喇叭发声的时间循环,改变大小可以改变发声时间长短

delay(80);

//参数决定发声的频率,估算值

SPK=!

SPK;

SPK=1;

//喇叭停止工作,间歇的时间,可更改

delay(20000);

7、继电器

用杜邦线把继电器输入端口和P1.1连接起来按键s1吸合s2释放继电器*/

sbitkey1=P3^0;

//定义按键位置

sbitkey2=P3^1;

sbitRELAY=P3^2;

//继电器

voiddelay(unsignedintcnt)//延时

RELAY=0;

//初始化

key1)//按下相应的按键

delay(5000);

//去抖

key1)//去抖后是否按下相应的按键

RELAY=1;

//继电器吸合

key2)//按下相应的按键

//去抖

key2)//去抖后是否按下相应的按键

RELAY=0;

//继电器释放

8、IIC协议

sbitsda=P2^0;

//位定义

sbitscl=P2^1;

uchara;

voiddelay()

{;

;

voidstart()//开始信号

{

sda=1;

//时钟线为高时,数据线由低到高的变化为开始

delay();

scl=1;

sda=0;

voidstop()//停止

//时钟先为高时,数据线由低到高的变化为结束

voidrespons()//应答

uchari;

//在高电平时读取信号

while((sda==1)&

&

(i<

250))i++;

//检验收到信号

scl=0;

//关闭第九个时钟

voidinit()//初始化

//总线全部释放

voidwrite_byte(uchardate)//写字节

uchari,temp;

temp=date;

8;

i++)//读取8个字节

temp=temp<

//移动8位,读取最高位

scl=0;

//时钟线拉低时,允许数据线变化

sda=CY;

//最高位移入CY中

delay();

scl=1;

//时钟线为高时,稳定数据

//读取低电平信号

ucharread_byte()//读字节

uchari,k;

//k为0

//时钟线拉低,允许数据线变化

//时钟线为高以稳定数据

k=(k<

1)|sda;

//将SDA中的高位赋给k输出

returnk;

voiddelay1(ucharx)//延时

uchara,b;

for(a=x;

a>

a--)

for(b=100;

b>

b--);

voidwrite_add(ucharaddress,uchardate)//写地址

start();

write_byte(0xa0);

//器件地址

respons();

write_byte(address);

//器件内部存储器地址

write_byte(date);

//写字节

stop();

ucharread_add(ucharaddress)//读地址

uchardate;

//读器件地址

//读器件内部存储器地址

//换方向读

write_byte(0xa1);

//读下一个数据

date=read_byte();

returndate;

write_add(23,0xaa);

//

delay1(100);

P3=read_add(23);

//把读到的数据显示出来

9、AD转换

include<

sbitduan=P2^2;

sbitwei=P2^3;

ucharx1,x2,x3,x4,x5,x6,x7,x8;

uchardat[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

{;

voiddelayx(ucharx)

voidstart()

voidstop()

voidack()

if((sda==1)&

250))i++;

voidwritebyte(uchardat)

dat=dat<

delay();

sda=1;

ucharreadbyte()

uchari,dat;

if(sda)dat++;

returndat;

voidwriteEEPROM(ucharadd,uchardat)

writebyte(0xa0);

ack();

writebyte(add);

writebyte(dat);

ucharreadEEPROM(ucharadd)

uchartemp;

writebyte(0xa1);

temp=readbyte();

returntemp;

ucharreadadc(ucharchl)

writebyte(0x90);

writebyte(0x40|chl);

writebyte(0x91);

voiddisplay(ucharx1,ucharx2,ucharx3,ucharx4,ucharx5,ucharx6,ucharx7,ucharx8)

P1=0xff;

P1=dat[x1];

P1=0;

P1=0x01;

delayx(100);

P1=dat[x2];

P1=0x02;

P1=dat[x3];

P1=0x04;

P1=dat[x4];

P1=0x08;

P1=dat[x5];

P1=0x10;

P1=dat[x6];

P1=0x20;

P1=dat[x7];

P1=0x40;

P1=dat[x8];

P1=0x80;

voidzhuanhuan()

floattemp;

temp=readadc(0);

//delayx(1000);

x1=(int)temp/1000;

x2=(int)temp%1000/100;

x3=(int)temp%100/10;

x4=(int)temp%10;

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单线温度检测

REG52.H>

#defineuintunsignedint;

sbitseg1=P2^0;

sbitseg2=P2^1;

sbitseg3=P2^2;

sbitDQ=P3^0;

//ds18b20端口

uchartemp;

ucharflag_get,count,num,minute,second;

ucharcodetab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};

//7段数码管段码表共阳

ucharstr[3];

voiddelay1(ucharMS);

unsignedcharReadTemperature(void);

voidInit_DS18B20(void);

unsignedcharReadOneChar(void);

voidWriteOneChar(un

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

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

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