89C51单片机的学习
好久都没来写一些东西了
最近老是忙着玩了,都忘记认真学习了。
大概从明天开始就要开始忙了。
1,英语四级
2,单片机课程
3,安卓课程
4,PS
感觉事情好多。
但是我还是心不在焉。好奇怪。
反正就是谈恋爱有点动心吧。好了,不说恋爱问题,头疼。说说最近一些好玩的,不是很无聊的项目。
最近跟着熊旻燕老师学单片机连自己的专业课都不上。做了几个小project(这个英文咋翻译。。)感觉还行吧。
就大概的介绍一下最近的课程吧
1,点亮第一个灯
sbit LED=P1^1;
LED=1;
这就点亮了。。就是这么短的代码。。。
然后做了流水灯
源码找不到了,用一个最后流水灯的“大”project顶上吧。。这个project实现的就是几个灯的变换方式。代码的注释里写的有。。好,贴代码。
1 void main(void) 2 { 3 //声明变量 4 unsigned int nums[]={0x7E,0xBD,0xDB,0xE7}; 5 unsigned int j; 6 unsigned char temp; 7 unsigned int i; 8 9 10 //最大的循环 11 while(1) 12 { 13 14 15 while(i<=5) 16 { 17 18 //1111111 碰头 部分 19 for(j=0;j<4;j++) 20 { 21 P2=nums[j]; 22 delay(600); 23 } 24 i++; 25 } 26 while(i<=3) 27 { 28 //2222222 流水 部分 29 temp=0xfe; //只亮第一个灯 fe=1111 1110 30 for(j=0;j<8;j++) 31 { 32 P2=temp; 33 temp=(temp<<1)+1;//补0 34 delay(600); 35 } 36 i++; 37 } 38 //3333333 第三部分1,2,3,4种情况亮灯 39 //1 40 P2=0xFC; 41 delay(1200); 42 //2 43 P2=0x0f; 44 delay(1200); 45 //3 46 P2=0xc0; 47 delay(1200); 48 //4 49 P2=0x00; 50 delay(1200); 51 52 53 //444444444 全灭 54 P2=0xff; 55 delay(1200); 56 i=0; //重置i 以免死循环在第3部分 57 }//while end 58 }//main end
之后就自己淘宝上买了些电子元件,(妈的说的就来火,忘记买芯片了。然后坐车去广埠屯买的)
买了烙铁,买了胶枪。然后把板子焊好了。
没圆口电源线就找了路由器的电源线,没USB线就找了个合适的分线器,没串口线就找老师借了一根。
最后亮灯的时候发现有灯脚焊反了。又倒腾了半天。最后不错还是全部弄好了。
好,点灯就到此为止了。
下一步开始学示波器。。。
因为有C#基础,点灯的小程序根本不是什么事,写的比14级的同学快,有点小骄傲,就没跟着老师走了。
讲示波器的那天听得很大概,然后自己回来也没写作业,第二天去了之后啥都听不懂,一脸懵逼。看着老师都不好意思。
最后厚着脸拍了别人的代码一点一点分析,一点一点写注释——————还是没搞好。。。妈的。
晚上回去之后自己好好写了几作业,定时器示波器算是多多少少有些理解了。
示波器的代码就不贴上来了。太尴尬了哈哈哈哈。
好,然后就到了今天,写了一个显示按键次数的程序。
两种方法在课堂上都写完了,第二种有bug然后在老师的催促下找了bug然后修复了。。。
贴代码吧。————出现吧代码君!、
这是方法一的代码
void main(void) { //初始化 TMOD=0x60; TF1=0; TH1=0xff; TL1=0xff; P2=0x00; //启动 TR1=1; while(1) { if(TF1==1) { P2=(P2+1)%10; TF1=0; } } }
这是方法二的代码
#include<reg51.h> sbit btn=P3^6; void delay(unsigned int i) { unsigned char j; for(i;i>0;i--) { for(j=255;j>0;j--); } } void main(void) { unsigned char i,n; while(1) { n=0x00; while(i<10) { if(btn==0) { n=n+1; i++; delay(600); } P2 = n; } P2=0x00; i=0; } }
好了,大概就是这些。。
最后。。想祭出我的“表白杀器”
就是控制八位数码管哈哈哈哈。。。。
写了我好长时间的。。
有点长但是不复杂。
#include<reg51.h> #define L1 P0 //power sbit con1=P3^0; sbit con2=P3^1; sbit con3=P3^2; sbit con4=P3^3; sbit con5=P3^4; sbit con6=P3^5; sbit con7=P3^6; sbit con8=P3^7; unsigned char code SEG[]={0xc0,0xf9,0xa4,0xb0, 0x99,0x02,0x82,0xf8, 0x80,0x90,0x88,0x83, 0xa7,0xa1,0x86,0x8e}; void delay(unsigned int k) { unsigned char j; for(k;k>0;k--) { for(j=255;j>0;j--); } } //dalay的函数 void LED_Display(unsigned char *p,unsigned char n) { unsigned char i; for(i=1;i<=n;i++) { L1=0xff; switch(i) { //控制第1位 case 1: con1=1; con2=0; con3=0; con4=0; con5=0; con6=0; con7=0; con8=0; break; //控制第2位 case 2: con1=0; con2=1; con3=0; con4=0; con5=0; con6=0; con7=0; con8=0; break; //控制第3位 case 3: con1=0; con2=0; con3=1; con4=0; con5=0; con6=0; con7=0; con8=0; break; //控制第4位 case 4: con1=0; con2=0; con3=0; con4=1; con5=0; con6=0; con7=0; con8=0; break; case 5: con1=0; con2=0; con3=0; con4=0; con5=1; con6=0; con7=0; con8=0; break; case 6: con1=0; con2=0; con3=0; con4=0; con5=0; con6=1; con7=0; con8=0; break; case 7: con1=0; con2=0; con3=0; con4=0; con5=0; con6=0; con7=0; con8=1; break; case 8: con1=0; con2=0; con3=0; con4=0; con5=0; con6=0; con7=0; con8=1; break; } //switch L1=SEG[*p]; p++; delay(10); } //for L1=0xff; } //display int main(void) { unsigned char p[8]={2,0,1,6,0,3,2,8}; while(1) { P1=0xc0; LED_Display(p,8); } }
最后。。。也不知道说啥。。哦!对了。。。没电路图简直就是耍流氓啊。。。。啊哈哈哈电路图没有。。。因为不喜欢new project,就总是把前面的器件删掉然后直接改掉。。
现在就只有按键跟一位数码管了哈哈哈哈。。。
另外,还有啥处分那事。咋说呐。。就是那样吧,没什么交代的。就这样。
别等下一更哈哈哈。。。我自己都不知道啥时候才会回来写一次博。。。
如果我明天来了。。。说明我真的准备搞学习了哈哈哈哈哈