完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
DIY--属于自己的51单片机学习板,这是个很酷的活动。学单片机一年多了,自己曾经买过一套51单片机学习板练习过,但毕竟不是自己画的板,也不是自己制作出来的。正好通过此次机会参与一下,学习一下单片机各个模块及练练自己的动手能力。这次制作我用最小系统+各种模块全用万用板来焊接。
评分
|
||
相关推荐
97 个讨论
|
||
|
提示: 作者被禁止或删除 内容自动屏蔽
|
|
|
|
|
|
|
|
|
软件部分:1. LED流水灯(跑马灯)
跑马灯程序: /***********************************************/ /***********************************************/ #include #define uchar unsigned char #define uint unsigned int /******ms延时子程序*************/ void delayMs(uint z) { uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /******************************/ uchar code table[]= { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe,//从坐到右,再从右到左,逐个亮灭 0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x00,//从坐到右,再从右到左,逐个点亮 0xe7,0xdb,0xbd,0x7e,0xbd,0xdb,0xe7,0xff,0xe7,0xc3,0x81,0x00,0x81,0xc3,0xe7,0xff,//说明:可自己定义流水灯样式, 0xaa,0x55,0x18,0xff,0xf0,0x0f,0x00,0xff,0xf8,0xf1,0xe3,0xc7,0x8f,0x1f,0x3f,0x7f,//直接添加进入这个数组即可。 0x7f,0x3f,0x1f,0x8f,0xc7,0xe3,0xf1,0xf8,0xff,0x00,0x00,0xff,0xff,0x0f,0xf0,0xff, 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f,0xff,0xff,0xff,0xff,0x7f,0xbf,0xdf,0xef, 0xf7,0xfb,0xfd,0xfe,0xfe,0xfc,0xf8,0xf0,0xe0,0xc0,0x80,0x00,0x00,0x00,0x00,0x00, 0x00,0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0x00,0xff,0x00,0xff,0x00,0xff,0x00,0xff }; //主程序 void main() { uchar i; while(1) { //从数组中读取数据送至P0口显示 for(i=0;i<128;i++) //对应数组里面16进制的个数 { P0=table; delayMs(200); //即延时大约200毫秒 } } } |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
更新软件部分:3、定时器中断99秒秒表
代码如下: #include #define uint unsigned int #define uchar unsigned char ***it duan=P2^0; ***it wei=P2^1; uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98} ; //0,1,2,3,4,5,6,7,8,9 共阳数码管 void delyaMs(uint); void display(uchar,uchar); uchar shi,ge,num,num1; void main() { TMOD=0x01;//设置定时器0,工作方式1 TH0=(65535-45872)/256; //装初值11.0592MHz晶振定时50ms数位45872 TL0=(65535-45872)%256; EA=1; //开总中断 ET0=1; //开定时器中断 TR0=1; //启动定时器0 while(1) { display(shi,ge); } } /**********延时子函数*************************/ void delayMs(uint z) { uint x,y; for(x=z;z>0;z--) //x=z,即延时z毫秒 for(y=110;y>0;y--); } /*********显示子函数*********************************/ void display(uchar shi,uchar ge) { duan=1; //打开段选信号 P0=table[shi];//送段选数据 duan=0; //关闭段选信号 P0=0xff; //送位选数据前关闭所有显示,放置打开位选锁存时原来段选数据***扰造成混乱 wei=1; P0=0x02;//送位选数据 000000010 wei=0; delayMs(5); duan=1; P0=table[ge]; duan=0; P0=0xff; wei=1; P0=0x01; wei=0; delayMs(5); } /*************************************************/ void T0_time() interrupt 1 { TH0=(65535-45872)/256; //重装初值 TL0=(65535-45872)%256; num1++; if(num1==20)//如果到了20次,说明1秒时间到 { num1=0; num++; if(num==100) num=0; shi=num/10; ge=num%10; } } /********************结束******************************/ |
|
|
|
|
|
|
|
|
软件部分:4、DS18B20温度传感器实验(1602显示,包含小数点) 效果图及代码如下: /***********************************************/ /*名称:DS18B20温度传感器实验(1602显示) /***********************************************/ #include #define uchar unsigned char #define uint unsigned int ***it DQ=P1^4; //DA18B20数据线定义 ***it RS=P2^7; //1602管脚定义 ***it RW=P2^6; ***it EN=P2^5; unsigned char code str1[]={"Current Temp :"}; //1602第一行界面显示 unsigned char code str2[]={"TEMP: C "}; //1602第二行界面显示 uchar data disdata[5]; //定义显示缓存 uint tvalue;//温度值 uchar tflag;//温度正负标志 /********************延时子函数*********************/ void delay1ms(unsigned int ms)//延时1毫秒(不够精确的) { unsigned int i,j; for(i=0;i } /***************************************************/ /*******************1602显示函数*******************/ /********************写命令************************/ 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() { delay1ms(15); wr_com(0x38);delay1ms(5);//00111000 设置16X2显示,5X7点阵,8位数据接口 wr_com(0x08);delay1ms(5); wr_com(0x0c);delay1ms(5);//设置开显示,不显示光标 wr_com(0x06);delay1ms(5);//写一个字符后地址指针加1 wr_com(0x01);delay1ms(5);//显示清0,数据指针清0 } /***************************************************/ /*******************显示函数************************/ void display(unsigned char *p) { while(*p!=' |

淘帖
11858