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