您好,欢迎来到99网。
搜索
您的当前位置:首页51单片机开发板实例程序

51单片机开发板实例程序

来源:99网
51单片机开发板实例程序

51单片机实验开发板实验程序1.P1口第一个二极管亮 #include void main() { P1=0xfd; }

2. P1口第一个二极管闪烁 #include

#define unit unsigned int #define uchar unsigned char sbit led1=P1^0; void delay(); void main() { while(1) { led1=0; delay(); led1=1; delay(); } }

void delay() { unit x,y;

for(x=100;x>0;x--) for(y=2000;y>0;y--); }

3.1602液晶显示器移屏显示字符 #include

#define uchar unsigned char #define uint unsigned int

uchar code table[]=\"I LIKE MCU!\"; uchar

table1[]=\"http://www.doczj.com/doc/f118368714.html,\";

sbit lcden=P3^4; sbit lcdrs=P3^5; sbit dula=P2^6; sbit wela=P2^7; uchar num; void delay(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); }

void write_com(uchar com) { lcdrs=0; P0=com; delay(5); lcden=1; delay(5); lcden=0; }

void write_data(uchar date) { lcdrs=1;

code

P0=date; delay(5); lcden=1; delay(5); lcden=0; }

void init() { 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); }

void main() { 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); // 左移0001 1100 delay(200); } while(1); }

4.温度计(1602显示,18b20传感器采集温度): #include

#define uchar unsigned char #define uint unsigned int sbit dula=P2^6; sbit wela=P2^7;

sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^5; //sbit RW=P3^1; sbit EN=P3^4;

unsigned char code str1[]={\"temperature: \unsigned char code str2[]={\" \uchar data disdata[5]; uint tvalue;//温度值 uchar tflag;//温度正负标志 /*************************lcd16021毫秒(不够精确的)

{unsigned int i,j;

for(i=0;i for(j=0;j<100;j++);

**************************/ void delay1ms(unsigned int ms)//延时

}

void wr_com(unsigned char com)//写指令// { delay1ms(1); RS=0; //RW=0; EN=0; P0=com; delay1ms(1); EN=1; delay1ms(1); EN=0; }

void wr_dat(unsigned char dat)//写数据// { delay1ms(1);; RS=1; // RW=0; EN=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0; }

void lcd_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); }

void display(unsigned char *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***************************************/ delay_18B20(unsigned int i)//延时1微秒

{

while(i--); }

void ds1820rst()/*ds1820复位*/ { unsigned char x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低

delay_18B20(100); //精确延时大于480us

序void

DQ = 1; //拉高 delay_18B20(40); }

uchar ds1820rd()/*读数据*/ { unsigned char i=0; unsigned char dat = 0; for (i=8;i>0;i--) { DQ = 0; //给脉冲信号 dat>>=1;

DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); }

return(dat); }

void ds1820wr(uchar wdata)/*写数据*/ {unsigned char i=0; for (i=8; i>0; i--) { DQ = 0;

DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } }

read_temp()/*读取温度值并转换*/ {uchar a,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); }

/*******************************************************************/ void ds1820disp()//温度值显示

{ uchar flagdat;

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]);//显示小数位 }

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

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

void main()

{ init_play();//初始化显示 while(1)

{read_temp();//读取温度 ds1820disp();//显示 } }

5.温度计(1602液晶显示,18b20采集温度,先显示学号,在显示温度)

#include

#include

#define uchar unsigned char #define uint unsigned int

sbit DQ=P3^7;//ds18b20与单片机连接口 sbit RS=P3^5; //sbit RW=P2^1; sbit EN=P3^4; sbit dula=P2^6; sbit wela=P2^7;

uchar code str1[]={\" Temperature is \uchar code str2[]={\"\

uchar code str3[]={\"set_hightemp: \uchar code str4[]={\"set_lowtemp: \uchar code str5[]={\"studentN0: \

uchar code str6[]={\"1109624076:1191\uchar data disdata[5];

uchar set_hightemp=33,set_lowtemp=0; //uchar p=0; //uchar aa[2]; uint tvalue;//温度值 uchar tflag;//温度正负标志 //*************************lcd1602**************************/

void delay1ms(uint ms)//延时1毫秒 { uint i,j;

for(i=0;i for(j=0;j<114;j++); }

void delay1s(uint s)

{ uint i;

for(i=0;i delay1ms(1000); }

void wr_com(uchar com)//写指令// { delay1ms(1); RS=0; //RW=0; EN=0; P0=com; // delay1ms(1); EN=1; delay1ms(1); EN=0; }

void wr_dat(uchar dat)//写数据// { delay1ms(1); RS=1; // RW=0; EN=0; P0=dat; delay1ms(1); EN=1; delay1ms(1); EN=0; }

void lcd_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); } void display(uchar *p)//显示// { while(*p!='\\0') {

wr_dat(*p); p++; delay1ms(1); } }

void init_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

****************************/ void delay_18B20(uint i)//延时1微秒

{

while(i--); }

void ds1820rst()/*ds1820复位*/ {

uchar x=0; DQ = 1; //DQ复位 delay_18B20(4); //延时 DQ = 0; //DQ拉低

delay_18B20(100); //精确延时大于480us DQ = 1; //拉高 delay_18B20(40); }

uchar ds1820rd()/*读数据*/ {

uchar i=0; uchar dat = 0; for (i=8;i>0;i--) {

DQ = 0; //给脉冲信号 dat>>=1;

DQ = 1; //给脉冲信号 if(DQ) dat|=0x80; delay_18B20(10); }

return(dat); }

void ds1820wr(uchar wdata)/*写数据*/

{

uchar i=0; for (i=8; i>0; i--) { DQ = 0;

DQ = wdata&0x01; delay_18B20(10); DQ = 1; wdata>>=1; } }

read_temp()/*读取温度值并转换*/ {

uchar a,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); }

void ds1820disp()//温度值显示 {

uchar flagdat;

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]);//显示小数位 }

void main() { P2=0xff;

init_play();//初始化显示 while(1) {

read_temp();//读取温度 ds1820disp();//显示} }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 99spj.com 版权所有 湘ICP备2022005869号-5

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务