打印

自制<<手把手教你学单片机C程序设计>>实验板

[复制链接]
楼主: gdqinci
手机看帖
扫描二维码
随时随地手机跟帖
61
gdqinci|  楼主 | 2010-4-5 15:38 | 只看该作者 回帖奖励 |倒序浏览
实验二,8个LED数码管从左至右扫描显示“00000000”

#include <reg51.h>
/*=========================*/
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
{for(j=0;j<121;j++)
{;}}
}
//======================
void main(void)
{
while(1)
    {
P0=0x3f;
P2=0xfe;
delay(1);
//=================
P0=0x3f;
P2=0xfd;
delay(1);
//=================
P0=0x3f;
P2=0xfb;
delay(1);
//=================
P0=0x3f;
P2=0xf7;
delay(1);
//=================
P0=0x3f;
P2=0xef;
delay(1);
//=================
P0=0x3f;
P2=0xdf;
delay(1);
//=================
P0=0x3f;
P2=0xbf;
delay(1);
//=================
P0=0x3f;
P2=0x7f;
delay(1);
//=================
    }
}

CS6-2.jpg (63.13 KB )

CS6-2.jpg

使用特权

评论回复
62
gdqinci|  楼主 | 2010-4-5 15:41 | 只看该作者
实验三,无符号字符型变量与无符号整型变量值相乘实验

#include<REG51.H>
unsigned char code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//*=================================================================
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
   {for(j=0;j<121;j++)
  {;}
    }
}
//*================================================
void main(void)
{
  unsigned char x=30;
  unsigned int y=50;
  unsigned int z;
  z=x*y;
  while(1)
  {
   P0=SEG7[z/1000];
P2=0xf7;
delay(1);
//========================
P0=SEG7[(z%1000)/100];
P2=0xfb;
delay(1);
//========================
    P0=SEG7[(z%100)/10];
P2=0xfd;
delay(1);
//========================
    P0=SEG7[(z%10)];
P2=0xfe;
delay(1);
//========================
   }
}

CS6-3.jpg (61.06 KB )

CS6-3.jpg

使用特权

评论回复
63
gdqinci|  楼主 | 2010-4-5 15:43 | 只看该作者
实验四,无符号整型变量与无符号整型变量值相乘实验

#include<REG51.H>
unsigned char code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//*=================================================================
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
   {for(j=0;j<121;j++)
  {;}
    }
}
//*================================================
void main(void)
{
  unsigned int x=20;
  unsigned int y=11;
  unsigned char z;
  z=x*y;
  while(1)
  {
   P0=SEG7[z/100];
P2=0xfb;
delay(1);
//========================
P0=SEG7[(z%100)/10];
P2=0xfd;
delay(1);
//========================
    P0=SEG7[z%10];
P2=0xfe;
delay(1);
//========================
   }
}

CS6-4.jpg (51.38 KB )

CS6-4.jpg

使用特权

评论回复
64
nighn| | 2010-4-6 11:21 | 只看该作者
顶!顶!顶!

使用特权

评论回复
65
tanqinghai1984| | 2010-4-6 13:48 | 只看该作者
有错正常,发现就好!!

使用特权

评论回复
66
xfgood3872| | 2010-4-7 20:24 | 只看该作者
好啊

使用特权

评论回复
67
zsyf0918| | 2010-4-8 14:29 | 只看该作者

使用特权

评论回复
68
gdqinci|  楼主 | 2010-4-9 09:05 | 只看该作者
自己先顶一下,等一下有空再来继续

使用特权

评论回复
69
ajie117| | 2010-4-11 20:28 | 只看该作者
呵呵,学习了

使用特权

评论回复
70
gdqinci|  楼主 | 2010-4-11 21:37 | 只看该作者
下面开始第7章

乘法运算:两个乘数分别为常量与变量

#include <reg51.h>
unsigned char code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
#define CONST 2
/*=============================================================================*/
void delay(unsigned int k)
{
  unsigned int i,j;
  for(i=0;i<k;i++)
      {for(j=0;j<121;j++)
        {;}
     }
}
//==========================================================
void main(void)
{
   unsigned char x=1,y,i;
while(1)
   {
   y=x*CONST;
     for(i=0;i<250;i++)
     {
    P0=SEG7[y%10];
    P2=0xfe;
    delay(1);
    P0=SEG7[y/10];
    P2=0xfd;
    delay(1);
    }
   if(x<25)x=x+1;
     }
}

CS7-1.jpg (40.12 KB )

CS7-1.jpg

使用特权

评论回复
71
gdqinci|  楼主 | 2010-4-11 21:39 | 只看该作者
两个局部变量val1\val2的显示实验

#include <REG51.h>
unsigned char code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
/*==============================================================================*/
void delay(unsigned int k);
//================================================
void main(void)
{
unsigned char val1=1,val2=1,i;
while(1)
{
  for(i=0;i<250;i++)
     {
    P0=SEG7[val1%10];
    P2=0xfe;
    delay(1);
    //-------------------
    P0=SEG7[val1/10];
    P2=0xfd;
    delay(1);
    //-------------------
    P0=SEG7[val2%10];
    P2=0xfb;
    delay(1);
    //-------------------
    P0=SEG7[val2/10];
    P2=0xf7;
    delay(1);
   }
   val1=val1+1;
   if(val1>99){val1=1;}
   val2=val2+2;
   if(val2>99){val2=1;}
   }
}
//-------------------------------------------
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
    {
   for(j=0;j<121;j++)
      {;}
     }
}

CS7-2.jpg (35.86 KB )

CS7-2.jpg

使用特权

评论回复
72
gdqinci|  楼主 | 2010-4-11 21:40 | 只看该作者
全局变量globe_x的显示实验

#include <REG51.H>
unsigned char code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
int data globe_x;
//-----------------------------------------------------------------------------
void add(void);
void subb(void);
void delay(unsigned int k);
void display(void);
//-----------------------------------------------------------------------------
void main(void)
{
   while(1)
   {
   add();
   display();
   subb();
   display();
   if(globe_x>999){globe_x=0;}
   }
}
//=============================================
void add(void)
{
globe_x=globe_x+3;
}
//=================================
void subb(void)
{
globe_x=globe_x-2;
}
//====================================
void delay(unsigned int k)
{
unsigned int i,j;
for(i=0;i<k;i++)
    {
   for(j=0;j<121;j++)
      {;}
     }
}
//=======================================
void display(void)
{
unsigned char i;
for(i=0;i<250;i++)
    {
  P0=SEG7[globe_x/100];
  P2=0xfb;
  delay(1);
//-------------------
  P0=SEG7[(globe_x%100)/10];
  P2=0xfd;
  delay(1);
//-------------------
  P0=SEG7[globe_x%10];
  P2=0xfe;
  delay(1);
}
}

CS7-3.jpg (40.47 KB )

CS7-3.jpg

使用特权

评论回复
73
gdqinci|  楼主 | 2010-4-11 21:43 | 只看该作者
下面开始第8章

两数相加并输出结果实验

#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//=====================================================================
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
    {
   for(j=0;j<121;j++)
      {;}
     }
}
//=====================================================================
void main(void)
{
   uchar a,b,sum;
   a=55;
   b=200;
   sum=a+b;
while(1)
     {
  P0=SEG7[sum/100];
  P2=0xfb;
  delay(1);
  //========================
  P0=SEG7[(sum%100)/10];
  P2=0xfd;
  delay(1);
  //========================
  P0=SEG7[sum%10];
  P2=0xfe;
  delay(1);
  }
}

CS8-1.jpg (31.05 KB )

CS8-1.jpg

使用特权

评论回复
74
gdqinci|  楼主 | 2010-4-11 21:44 | 只看该作者
本帖最后由 gdqinci 于 2010-4-11 21:47 编辑

使用带参数的宏定义进行运算

#include <REG51.H>
#define uchar unsigned char
#define uint unsigned int
#define S(a,b) (a-b)*3
uchar code SEG7[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
//=====================================================================
void delay(uint k)
{
uint i,j;
for(i=0;i<k;i++)
    {
   for(j=0;j<121;j++)
      {;}
     }
}
//=====================================================================
void main(void)
{
     uchar out;
  out=S(100,50);
while(1)
     {
  P0=SEG7[out/100];
  P2=0xfb;
  delay(1);
  //========================
  P0=SEG7[(out%100)/10];
  P2=0xfd;
  delay(1);
  //========================
  P0=SEG7[out%10];
  P2=0xfe;
  delay(1);
  }
}

CS8-2.jpg (38.52 KB )

CS8-2.jpg

使用特权

评论回复
75
gdqinci|  楼主 | 2010-4-11 21:46 | 只看该作者
8个LED模拟彩灯闪烁实验

#include <reg51.h>
typedef unsigned char U8_BYTE;
typedef unsigned int U16_WORD;
void delay(U16_WORD k);
//================================
void main(void)
{
  U8_BYTE va1;
      while(1)
       {
       va1=0x55;
  P1=va1;
  delay(500);
  va1=0xaa;
  P1=va1;
  delay(500);
       }
}
//=================================
void delay(U16_WORD k)
{
U16_WORD i,j;
for(i=0;i<k;i++)
   {
   for(j=0;j<121;j++)
    {;}
   }
}

CS8-3.jpg (30.42 KB )

CS8-3.jpg

使用特权

评论回复
76
求知的电工| | 2010-4-11 23:12 | 只看该作者
加油:)

使用特权

评论回复
77
feipeng725| | 2010-4-12 21:34 | 只看该作者
动手是很重要的,要把理论与实践很好的联系起来

使用特权

评论回复
78
zdzisjsz| | 2010-4-14 08:42 | 只看该作者
我是电路盲,不过学过,可以看懂一点,有空研究研究

使用特权

评论回复
79
gdqinci|  楼主 | 2010-4-14 11:22 | 只看该作者
谢谢楼上的几位兄弟,板子是我自己根据原书中的电路图加以改进后画出来的,因为原书中的电路图有几处画得不是很清楚。特别是数码管电路,我感觉书中的电路是错误的,所以就对它进行改动了。

使用特权

评论回复
80
gdqinci|  楼主 | 2010-4-21 11:21 | 只看该作者
自己先顶一个,这几天忙,过两天来更新

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则