51单片机开发板实例程序.docx
- 文档编号:24581233
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:19
- 大小:17.52KB
51单片机开发板实例程序.docx
《51单片机开发板实例程序.docx》由会员分享,可在线阅读,更多相关《51单片机开发板实例程序.docx(19页珍藏版)》请在冰豆网上搜索。
51单片机开发板实例程序
51单片机实验开发板实验程序
1.P1口第一个二极管亮
#include
voidmain()
{
P1=0xfd;
}
2.P1口第一个二极管闪烁
#include
#defineunitunsignedint
#defineucharunsignedchar
sbitled1=P1^0;
voiddelay();
voidmain()
{
while
(1)
{
led1=0;
delay();
led1=1;
delay();
}
}
voiddelay()
{
unitx,y;
for(x=100;x>0;x--)
for(y=2000;y>0;y--);
}
3.1602液晶显示器移屏显示字符
#include
#defineucharunsignedchar
#defineuintunsignedint
ucharcodetable[]="ILIKEMCU!
";
ucharcodetable1[]="WWW.TXMCU.COM";
sbitlcden=P3^4;
sbitlcdrs=P3^5;
sbitdula=P2^6;
sbitwela=P2^7;
ucharnum;
voiddelay(uintz)
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidwrite_data(uchardate)
{
lcdrs=1;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
voidinit()
{
dula=0;
wela=0;
lcden=0;
write_com(0x38);//设置16x2显示。
5x7点阵,8位数据接口
write_com(0x0e);//显示设置光标不显示
write_com(0x06);//光标移动,地址指针加一
write_com(0x01);//显示清屏
//write_com(0x80+0x10);
}
voidmain()
{
init();
write_com(0x80+0x10);//显示第一行的位置
for(num=0;num<11;num++)//显示第一行,有11个字符
{
write_data(table[num]);
delay(20);
}
//write_com
(1);//清屏
write_com(0x80+0x53);//第二行显示位置
for(num=0;num<13;num++)//显示第二行有13个字符
{
write_data(table1[num]);
delay(20);
}
for(num=0;num<16;num++)//向左移16个字符
{
write_com(0x1c);//左移00011100
delay(200);
}
while
(1);
}
4.温度计(1602显示,18b20传感器采集温度):
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitdula=P2^6;
sbitwela=P2^7;
sbitDQ=P3^7;//ds18b20与单片机连接口
sbitRS=P3^5;
//sbitRW=P3^1;
sbitEN=P3^4;
unsignedcharcodestr1[]={"temperature:
"};
unsignedcharcodestr2[]={""};
uchardatadisdata[5];
uinttvalue;//温度值
uchartflag;//温度正负标志
/*************************lcd1602程序**************************/
voiddelay1ms(unsignedintms)//延时1毫秒(不够精确的)
{unsignedinti,j;
for(i=0;i for(j=0;j<100;j++); } voidwr_com(unsignedcharcom)//写指令// {delay1ms (1); RS=0; //RW=0; EN=0; P0=com; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidwr_dat(unsignedchardat)//写数据// {delay1ms (1);; RS=1; //RW=0; EN=0; P0=dat; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidlcd_init()//初始化设置// { dula=0; wela=0; delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } voiddisplay(unsignedchar*p)//显示// { while(*p! ='\0') { wr_dat(*p); p++; delay1ms (1); } } init_play()//初始化显示 {lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); } /******************************ds1820程序***************************************/ voiddelay_18B20(unsignedinti)//延时1微秒 { while(i--); } voidds1820rst()/*ds1820复位*/ {unsignedcharx=0; DQ=1;//DQ复位 delay_18B20(4);//延时 DQ=0;//DQ拉低 delay_18B20(100);//精确延时大于480us DQ=1;//拉高 delay_18B20(40); } uchards1820rd()/*读数据*/ {unsignedchari=0; unsignedchardat=0; for(i=8;i>0;i--) {DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } voidds1820wr(ucharwdata)/*写数据*/ {unsignedchari=0; for(i=8;i>0;i--) {DQ=0; DQ=wdata&0x01; delay_18B20(10); DQ=1; wdata>>=1; } } read_temp()/*读取温度值并转换*/ {uchara,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else {tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue); } /*******************************************************************/ voidds1820disp()//温度值显示 {ucharflagdat; disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温度不显示符号 else flagdat=0x2d;//负温度显示负号: - if(disdata[0]==0x30) {disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30) {disdata[1]=0x20;//如果百位为0,十位为0也不显示 } } wr_com(0xc0); wr_dat(flagdat);//显示符号位 wr_com(0xc1); wr_dat(disdata[0]);//显示百位 wr_com(0xc2); wr_dat(disdata[1]);//显示十位 wr_com(0xc3); wr_dat(disdata[2]);//显示个位 wr_com(0xc4); wr_dat(0x2e);//显示小数点 wr_com(0xc5); wr_dat(disdata[3]);//显示小数位 } /********************主程序***********************************/ voidmain() {init_play();//初始化显示 while (1) {read_temp();//读取温度 ds1820disp();//显示 } } 5.温度计(1602液晶显示,18b20采集温度,先显示学号,在显示温度) #include #include #defineucharunsignedchar #defineuintunsignedint sbitDQ=P3^7;//ds18b20与单片机连接口 sbitRS=P3^5; //sbitRW=P2^1; sbitEN=P3^4; sbitdula=P2^6; sbitwela=P2^7; ucharcodestr1[]={"Temperatureis"}; ucharcodestr2[]={""}; ucharcodestr3[]={"set_hightemp: "}; ucharcodestr4[]={"set_lowtemp: "}; ucharcodestr5[]={"studentN0: "}; ucharcodestr6[]={"1109624076: 119641"}; uchardatadisdata[5]; ucharset_hightemp=33,set_lowtemp=0; //ucharp=0; //ucharaa[2]; uinttvalue;//温度值 uchartflag;//温度正负标志 //*************************lcd1602程序**************************/ voiddelay1ms(uintms)//延时1毫秒 { uinti,j; for(i=0;i for(j=0;j<114;j++); } voiddelay1s(uints) { uinti; for(i=0;i delay1ms(1000); } voidwr_com(ucharcom)//写指令// { delay1ms (1); RS=0; //RW=0; EN=0; P0=com;// delay1ms (1); EN=1; delay1ms (1); EN=0; } voidwr_dat(uchardat)//写数据// { delay1ms (1); RS=1; //RW=0; EN=0; P0=dat; delay1ms (1); EN=1; delay1ms (1); EN=0; } voidlcd_init()//初始化设置// { delay1ms(15); wr_com(0x38);delay1ms(5); wr_com(0x08);delay1ms(5); wr_com(0x01);delay1ms(5); wr_com(0x06);delay1ms(5); wr_com(0x0c);delay1ms(5); } voiddisplay(uchar*p)//显示// { while(*p! ='\0') { wr_dat(*p); p++; delay1ms (1); } } voidinit_play()//初始化显示 { dula=0; wela=0; lcd_init(); wr_com(0x80); display(str5); wr_com(0xc0); display(str6); delay1s(3); lcd_init(); wr_com(0x80); display(str1); wr_com(0xc0); display(str2); } /***************************ds18b20程序****************************/ voiddelay_18B20(uinti)//延时1微秒 { while(i--); } voidds1820rst()/*ds1820复位*/ { ucharx=0; DQ=1;//DQ复位 delay_18B20(4);//延时 DQ=0;//DQ拉低 delay_18B20(100);//精确延时大于480us DQ=1;//拉高 delay_18B20(40); } uchards1820rd()/*读数据*/ { uchari=0; uchardat=0; for(i=8;i>0;i--) { DQ=0;//给脉冲信号 dat>>=1; DQ=1;//给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); } return(dat); } voidds1820wr(ucharwdata)/*写数据*/ { uchari=0; for(i=8;i>0;i--) { DQ=0; DQ=wdata&0x01; delay_18B20(10); DQ=1; wdata>>=1; } } read_temp()/*读取温度值并转换*/ { uchara,b; ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0x44);//*启动温度转换*/ ds1820rst(); ds1820wr(0xcc);//*跳过读序列号*/ ds1820wr(0xbe);//*读取温度*/ a=ds1820rd(); b=ds1820rd(); tvalue=b; tvalue<<=8; tvalue=tvalue|a; if(tvalue<0x0fff) tflag=0; else { tvalue=~tvalue+1; tflag=1; } tvalue=tvalue*(0.625);//温度值扩大10倍,精确到1位小数 return(tvalue); } voidds1820disp()//温度值显示 { ucharflagdat; disdata[0]=tvalue/1000+0x30;//百位数 disdata[1]=tvalue%1000/100+0x30;//十位数 disdata[2]=tvalue%100/10+0x30;//个位数 disdata[3]=tvalue%10+0x30;//小数位 if(tflag==0) flagdat=0x20;//正温度不显示符号 else flagdat=0x2d;//负温度显示负号: - if(disdata[0]==0x30) { disdata[0]=0x20;//如果百位为0,不显示 if(disdata[1]==0x30) { disdata[1]=0x20;//如果百位为0,十位为0也不显示 } } wr_com(0xc0+4); wr_dat(flagdat);//显示符号位 wr_com(0xc1+4); wr_dat(disdata[0]);//显示百位 wr_com(0xc2+4); wr_dat(disdata[1]);//显示十位 wr_com(0xc3+4); wr_dat(disdata[2]);//显示个位 wr_com(0xc4+4); wr_dat(0x2e);//显示小数点 wr_com(0xc5+4); wr_dat(disdata[3]);//显示小数位 } voidmain() { P2=0xff; init_play();//初始化显示 while (1) { read_temp();//读取温度 ds1820disp();//显示 } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 开发 板实 例程