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,就总是把前面的器件删掉然后直接改掉。。

现在就只有按键跟一位数码管了哈哈哈哈。。。

另外,还有啥处分那事。咋说呐。。就是那样吧,没什么交代的。就这样。

别等下一更哈哈哈。。。我自己都不知道啥时候才会回来写一次博。。。

如果我明天来了。。。说明我真的准备搞学习了哈哈哈哈哈

原文地址:https://www.cnblogs.com/-SANG/p/5356650.html