天狼星51AVR课上程序代码Word文档下载推荐.docx

上传人:b****6 文档编号:20825878 上传时间:2023-01-25 格式:DOCX 页数:49 大小:24.50KB
下载 相关 举报
天狼星51AVR课上程序代码Word文档下载推荐.docx_第1页
第1页 / 共49页
天狼星51AVR课上程序代码Word文档下载推荐.docx_第2页
第2页 / 共49页
天狼星51AVR课上程序代码Word文档下载推荐.docx_第3页
第3页 / 共49页
天狼星51AVR课上程序代码Word文档下载推荐.docx_第4页
第4页 / 共49页
天狼星51AVR课上程序代码Word文档下载推荐.docx_第5页
第5页 / 共49页
点击查看更多>>
下载资源
资源描述

天狼星51AVR课上程序代码Word文档下载推荐.docx

《天狼星51AVR课上程序代码Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《天狼星51AVR课上程序代码Word文档下载推荐.docx(49页珍藏版)》请在冰豆网上搜索。

天狼星51AVR课上程序代码Word文档下载推荐.docx

//大约50ms的延时

voiddelay_50ms(uintt)

uintj;

for(j=6245;

voidmain()

IT0=1;

//外部中断下降沿触发

EX0=1;

//打开外部中断0

EA=1;

//打开总中断

while

(1)

{

if(keynum==3)

keynum=0;

//0x1c

n=key[0]/16;

m=key[0]%16;

}

P1=smg_du[m];

P2=smg_we[0];

delay_50us(20);

P1=smg_du[n];

P2=smg_we[1];

voidint0()interrupt0

if((numbit>

0)&

&

(numbit<

9))//>

>

keyv=keyv>

1;

//001000000

if(psdata)

keyv=keyv|0x80;

//10000000

}//01

numbit++;

//0

if(numbit>

10)

numbit=0;

key[keynum]=keyv;

keynum++;

}

51单片机第二十三课实时时钟芯片DS1302的读写

531

#include<

intrins.h>

sbitsck=P1^0;

sbitio=P1^1;

sbitrst=P3^6;

sbitsmgen=P2^3;

unsignedcharcodesmg_du[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x00,0x10};

uchartime_data[7]={10,6,4,17,11,58,30};

//年周月日时分秒

ucharwrite_add[7]={0x8c,0x8a,0x88,0x86,0x84,0x82,0x80};

ucharread_add[7]={0x8d,0x8b,0x89,0x87,0x85,0x83,0x81};

uchardisp[8];

voidwrite_ds1302_byte(uchardat);

voidwrite_ds1302(ucharadd,uchardat);

ucharread_ds1302(ucharadd);

voidset_rtc(void);

voidread_rtc(void);

voidtime_pros(void);

voiddisplay(void);

voidwrite_ds1302_byte(uchardat)

uchari;

for(i=0;

i<

8;

i++)

sck=0;

io=dat&

0x01;

dat=dat>

sck=1;

voidwrite_ds1302(ucharadd,uchardat)

rst=0;

_nop_();

_nop_();

rst=1;

write_ds1302_byte(add);

write_ds1302_byte(dat);

io=1;

ucharread_ds1302(ucharadd)

uchari,value;

value=value>

if(io)

value=value|0x80;

returnvalue;

voidset_rtc(void)

uchari,j;

7;

j=time_data[i]/10;

time_data[i]=time_data[i]%10;

time_data[i]=time_data[i]+j*16;

write_ds1302(0x8e,0x00);

//去除写保护

write_ds1302(write_add[i],time_data[i]);

write_ds1302(0x8e,0x80);

//加写保护

voidread_rtc(void)

time_data[i]=read_ds1302(read_add[i]);

}

voidtime_pros(void)

disp[0]=time_data[6]%16;

disp[1]=time_data[6]/16;

disp[2]=16;

disp[3]=time_data[5]%16;

disp[4]=time_data[5]/16;

disp[5]=16;

disp[6]=time_data[4]%16;

disp[7]=time_data[4]/16;

voiddisplay(void)

P1=smg_du[disp[i]];

P2=smg_we[i];

voidmain(void)

set_rtc();

smgen=0;

read_rtc();

time_pros();

smgen=1;

display();

51单片机第二十四课数字温度传感器DS18B20测温

506

sbitDQ=P2^2;

sbitsmg1=P2^4;

sbitsmg2=P2^5;

sbitsmg3=P2^6;

uchartemp;

voidinit_ds18b20(void);

voiddelay(uintt);

voidwrite_byte(uchardat);

ucharread_byte(void);

ucharreadtemperature(void);

temp=readtemperature();

voiddelay(uintt)

while(t--);

voidinit_ds18b20(void)

ucharn;

DQ=1;

delay(8);

DQ=0;

delay(80);

n=DQ;

delay(4);

voidwrite_byte(uchardat)

DQ=dat&

dat>

=1;

ucharread_byte(void)

value>

if(DQ)

value|=0x80;

ucharreadtemperature(void)

uchara,b;

init_ds18b20();

write_byte(0xcc);

//跳过ROM

write_byte(0x44);

//启动温度测量

delay(300);

write_byte(0xbe);

a=read_byte();

b=read_byte();

b<

<

=4;

b+=(a&

0xf0)>

4;

returnb;

smg3=0;

smg2=0;

smg1=0;

P1=smg_du[temp%10];

smg1=1;

P1=smg_du[temp/10];

51单片机第二十一课红外遥控解码程序设计

504

ucharirtime;

ucharstartflag;

ucharirdata[33];

ucharbitnum;

ucharirreceok;

ucharircode[4];

ucharirprosok;

voidtimer0init(void)

TMOD=0x02;

TH0=0x00;

TL0=0x00;

ET0=1;

TR0=1;

voidint0init(void)

voidirwork(void)

disp[0]=ircode[0]/16;

disp[1]=ircode[0]%16;

disp[2]=ircode[1]/16;

disp[3]=ircode[1]%16;

disp[4]=ircode[2]/16;

disp[5]=ircode[2]%16;

disp[6]=ircode[3]/16;

disp[7]=ircode[3]%16;

voidirpros(void)//0x1c

uchark,i,j;

ucharvalue;

k=1;

for(j=0;

j<

j++)

//7

if(irdata[k]>

6)//8

value=value|0x80;

k++;

ircode[j]=value;

irprosok=1;

timer0init();

int0init();

if(irreceok)

irpros();

irreceok=0;

if(irprosok)

irwork();

irprosok=0;

voidtimer0()interrupt1

irtime++;

//255

if(startflag)

if(irtime>

32)//检测引导码

bitnum=0;

irdata[bitnum]=irtime;

irtime=0;

bitnum++;

if(bitnum==33)

irreceok=1;

else

startflag=1;

51单片机第十六课串口数据收发实验

358

unsignedchara;

unsignedcharflag;

TMOD=0x20;

//设置定时器1为方式2

TH1=0xfd;

//装入初值

TL1=0xfd;

TR1=1;

//启动定时器1

SM0=0;

SM1=1;

//设置串口为方式1

REN=1;

//接受使能

//打开总中断开关

ES=1;

//打开串口中断开关

if(flag==1)

ES=0;

flag=0;

SBUF=a;

while(!

TI);

//等待数据发送结束

TI=0;

voidserial()interrupt4

a=SBUF;

P1=a;

RI=0;

flag=1;

//标志位

51单片机第十七课字符液晶LCD1602显示

436

sbitrs=P2^4;

sbitrw=P2^5;

sbite=P2^6;

uchartable1[]="

"

;

uchartable2[]="

LCD1602testok!

"

voidwrite_com(ucharcom)

e=0;

rs=0;

rw=0;

P0=com;

delay_50us(10);

e=1;

voidwrite_data(uchardat)

rs=1;

P0=dat;

voidinit(void)

delay_50us(300);

write_com(0x38);

delay_50us(100);

write_com(0x08);

write_com(0x01);

write_com(0x06);

write_com(0x0c);

init();

write_com(0x80);

16;

write_data(table1[j]);

write_com(0x80+0x40);

write_data(table2[j]);

while

(1);

51单片机第十三课矩阵键盘扫描实验

343

#de

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

当前位置:首页 > 解决方案 > 工作计划

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

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