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

[复制链接]
26226|184
 楼主| 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);
//=================
    }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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);
//========================
   }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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);
//========================
   }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
nighn 发表于 2010-4-6 11:21 | 显示全部楼层
顶!顶!顶!
tanqinghai1984 发表于 2010-4-6 13:48 | 显示全部楼层
有错正常,发现就好!!
xfgood3872 发表于 2010-4-7 20:24 | 显示全部楼层
zsyf0918 发表于 2010-4-8 14:29 | 显示全部楼层
 楼主| gdqinci 发表于 2010-4-9 09:05 | 显示全部楼层
自己先顶一下,等一下有空再来继续
ajie117 发表于 2010-4-11 20:28 | 显示全部楼层
呵呵,学习了
 楼主| 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;
     }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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++)
      {;}
     }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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);
}
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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);
  }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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);
  }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 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++)
    {;}
   }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
求知的电工 发表于 2010-4-11 23:12 | 显示全部楼层
加油:)
feipeng725 发表于 2010-4-12 21:34 | 显示全部楼层
动手是很重要的,要把理论与实践很好的联系起来
zdzisjsz 发表于 2010-4-14 08:42 | 显示全部楼层
我是电路盲,不过学过,可以看懂一点,有空研究研究
 楼主| gdqinci 发表于 2010-4-14 11:22 | 显示全部楼层
谢谢楼上的几位兄弟,板子是我自己根据原书中的电路图加以改进后画出来的,因为原书中的电路图有几处画得不是很清楚。特别是数码管电路,我感觉书中的电路是错误的,所以就对它进行改动了。
 楼主| gdqinci 发表于 2010-4-21 11:21 | 显示全部楼层
自己先顶一个,这几天忙,过两天来更新
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部