天狼星51AVR课上程序代码.docx

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

天狼星51AVR课上程序代码.docx

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

天狼星51AVR课上程序代码.docx

天狼星51AVR课上程序代码

51篇

51单片机第二十课PS2键盘键值解码

所属类别:

课程代码发布日期:

2011-03-05点击量:

383

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitpsdata=P3^0;

sbitpsclk=P3^2;

ucharnumbit;

ucharkeyv;

ucharkey[3];

ucharkeynum;

ucharm,n;

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

unsignedcharcodesmg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50us的延时

//************************************************

voiddelay_50us(uintt)

{

ucharj;

for(;t>0;t--)

for(j=19;j>0;j--);

}

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50ms的延时

//************************************************

voiddelay_50ms(uintt)

{

uintj;

for(;t>0;t--)

for(j=6245;j>0;j--);

}

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];

delay_50us(20);

}

}

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的读写

所属类别:

课程代码发布日期:

2011-03-05点击量:

531

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

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};

unsignedcharcodesmg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};

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);

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50us的延时

//************************************************

voiddelay_50us(uintt)

{

ucharj;

for(;t>0;t--)

for(j=19;j>0;j--);

}

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50ms的延时

//************************************************

voiddelay_50ms(uintt)

{

uintj;

for(;t>0;t--)

for(j=6245;j>0;j--);

}

voidwrite_ds1302_byte(uchardat)

{

uchari;

for(i=0;i<8;i++)

{

sck=0;

io=dat&0x01;

dat=dat>>1;

sck=1;

}

}

voidwrite_ds1302(ucharadd,uchardat)

{

rst=0;

_nop_();

sck=0;_nop_();

rst=1;

_nop_();

write_ds1302_byte(add);

write_ds1302_byte(dat);

rst=0;

_nop_();

io=1;

sck=1;

}

ucharread_ds1302(ucharadd)

{

uchari,value;

rst=0;

_nop_();

sck=0;

_nop_();

rst=1;

_nop_();

write_ds1302_byte(add);

for(i=0;i<8;i++)

{

value=value>>1;

sck=0;

if(io)

value=value|0x80;

sck=1;

}

rst=0;

_nop_();

sck=0;

_nop_();

sck=1;

io=1;

returnvalue;

}

voidset_rtc(void)

{

uchari,j;

for(i=0;i<7;i++)

{

j=time_data[i]/10;

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

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

}

write_ds1302(0x8e,0x00);//去除写保护

for(i=0;i<7;i++)

{

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

}

write_ds1302(0x8e,0x80);//加写保护

}

voidread_rtc(void)

{

uchari;

for(i=0;i<7;i++)

{

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)

{

uchari;

for(i=0;i<8;i++)

{

P1=smg_du[disp[i]];

P2=smg_we[i];

delay_50us(20);

}

}

voidmain(void)

{

set_rtc();

delay_50us(20);

while

(1)

{

smgen=0;

rst=1;

read_rtc();

rst=0;

time_pros();

smgen=1;

display();

smgen=0;

}

}

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

所属类别:

课程代码发布日期:

2011-03-05点击量:

506

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitDQ=P2^2;

sbitsmg1=P2^4;

sbitsmg2=P2^5;

sbitsmg3=P2^6;

uchartemp;

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

unsignedcharcodesmg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};

voidinit_ds18b20(void);

voiddelay(uintt);

voidwrite_byte(uchardat);

ucharread_byte(void);

ucharreadtemperature(void);

voiddisplay(void);

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50us的延时

//************************************************

voiddelay_50us(uintt)

{

ucharj;

for(;t>0;t--)

for(j=19;j>0;j--);

}

voidmain(void)

{

while

(1)

{

temp=readtemperature();

display();

}

}

voiddelay(uintt)

{

while(t--);

}

voidinit_ds18b20(void)

{

ucharn;

DQ=1;

delay(8);

DQ=0;

delay(80);

DQ=1;

delay(8);

n=DQ;

delay(4);

}

voidwrite_byte(uchardat)

{

uchari;

for(i=0;i<8;i++)

{

DQ=0;

DQ=dat&0x01;

delay(4);

DQ=1;

dat>>=1;

}

delay(4);

}

ucharread_byte(void)

{

uchari,value;

for(i=0;i<8;i++)

{

DQ=0;

value>>=1;

DQ=1;

if(DQ)

value|=0x80;

delay(4);

}

returnvalue;

}

ucharreadtemperature(void)

{

uchara,b;

init_ds18b20();

write_byte(0xcc);//跳过ROM

write_byte(0x44);//启动温度测量

delay(300);

init_ds18b20();

write_byte(0xcc);

write_byte(0xbe);

a=read_byte();

b=read_byte();

b<<=4;

b+=(a&0xf0)>>4;

returnb;

}

voiddisplay(void)

{

smg3=0;

smg2=0;

smg1=0;

P1=smg_du[temp%10];

delay_50us(20);

smg2=0;

smg1=1;

P1=smg_du[temp/10];

delay_50us(20);

}

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

所属类别:

课程代码发布日期:

2011-03-05点击量:

504

#include

#defineucharunsignedchar

#defineuintunsignedint

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

unsignedcharcodesmg_we[]={0x08,0x18,0x28,0x38,0x48,0x58,0x68,0x78};

ucharirtime;

ucharstartflag;

ucharirdata[33];

ucharbitnum;

ucharirreceok;

ucharircode[4];

ucharirprosok;

uchardisp[8];

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50us的延时

//************************************************

voiddelay_50us(uintt)

{

ucharj;

for(;t>0;t--)

for(j=19;j>0;j--);

}

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50ms的延时

//************************************************

voiddelay_50ms(uintt)

{

uintj;

for(;t>0;t--)

for(j=6245;j>0;j--);

}

voidtimer0init(void)

{

TMOD=0x02;

TH0=0x00;

TL0=0x00;

ET0=1;

EA=1;

TR0=1;

}

voidint0init(void)

{

IT0=1;

EX0=1;

EA=1;

}

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;

}

voiddisplay(void)

{

uchari;

for(i=0;i<8;i++)

{

P1=smg_du[disp[i]];

P2=smg_we[i];

delay_50us(20);

}

}

voidirpros(void)//0x1c

{

uchark,i,j;

ucharvalue;

k=1;

for(j=0;j<4;j++)

{

for(i=0;i<8;i++)

{

value=value>>1;//7

if(irdata[k]>6)//8

{

value=value|0x80;

}

k++;

}

ircode[j]=value;

}

irprosok=1;

}

voidmain()

{

timer0init();

int0init();

while

(1)

{

if(irreceok)

{

irpros();

irreceok=0;

}

if(irprosok)

{

irwork();

irprosok=0;

}

display();

}

}

voidtimer0()interrupt1

{

irtime++;//255

}

voidint0()interrupt0

{

if(startflag)

{

if(irtime>32)//检测引导码

{

bitnum=0;

}

irdata[bitnum]=irtime;

irtime=0;

bitnum++;

if(bitnum==33)

{

bitnum=0;

irreceok=1;

}

}

else

{

startflag=1;

irtime=0;

}

}

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

所属类别:

课程代码发布日期:

2011-03-05点击量:

358

#include

unsignedchara;

unsignedcharflag;

voidmain()

{

TMOD=0x20;//设置定时器1为方式2

TH1=0xfd;//装入初值

TL1=0xfd;

TR1=1;//启动定时器1

SM0=0;

SM1=1;//设置串口为方式1

REN=1;//接受使能

EA=1;//打开总中断开关

ES=1;//打开串口中断开关

while

(1)

{

if(flag==1)

{

ES=0;

flag=0;

SBUF=a;

while(!

TI);//等待数据发送结束

TI=0;

ES=1;

}

}

}

voidserial()interrupt4

{

a=SBUF;

P1=a;

RI=0;

flag=1;//标志位

}

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

所属类别:

课程代码发布日期:

2011-03-05点击量:

436

#include

#defineucharunsignedchar

#defineuintunsignedint

sbitrs=P2^4;

sbitrw=P2^5;

sbite=P2^6;

uchartable1[]="";

uchartable2[]="LCD1602testok!

";

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50us的延时

//************************************************

voiddelay_50us(uintt)

{

ucharj;

for(;t>0;t--)

for(j=19;j>0;j--);

}

//************************************************

//延时函数,在12MHz的晶振频率下

//大约50ms的延时

//************************************************

voiddelay_50ms(uintt)

{

uintj;

for(;t>0;t--)

for(j=6245;j>0;j--);

}

voidwrite_com(ucharcom)

{

e=0;

rs=0;

rw=0;

P0=com;

delay_50us(10);

e=1;

delay_50us(20);

e=0;

}

voidwrite_data(uchardat)

{

e=0;

rs=1;

rw=0;

P0=dat;

delay_50us(10);

e=1;

delay_50us(20);

e=0;

}

voidinit(void)

{

delay_50us(300);

write_com(0x38);

delay_50us(100);

write_com(0x38);

delay_50us(100);

write_com(0x38);

write_com(0x38);

write_com(0x08);

write_com(0x01);

write_com(0x06);

write_com(0x0c);

}

voidmain()

{

ucharj;

init();

write_com(0x80);

for(j=0;j<16;j++)

{

write_data(table1[j]);

delay_50us(10);

}

write_com(0x80+0x40);

for(j=0;j<16;j++)

{

write_data(table2[j]);

delay_50us(10);

}

while

(1);

}

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

所属类别:

课程代码发布日期:

2011-03-05点击量:

343

#include

#de

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

当前位置:首页 > 表格模板 > 合同协议

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

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