目录

  • 1 项目1  电子琴设计
    • 1.1 课程概述
    • 1.2 蜂鸣器发声
    • 1.3 不同音阶发声和控制
    • 1.4 多功能电子琴
      • 1.4.1 播放一首乐曲的程序编写与仿真
      • 1.4.2 具有多功能电子琴设计与实施
      • 1.4.3 具有多功能电子琴程序编写和仿真
      • 1.4.4 具有多功能电子琴设计--直播程序讲解
  • 2 项目2  LED流水灯设计
    • 2.1 左右依次循环点亮的流水灯设计
    • 2.2 多种花样点亮的流水灯设计
    • 2.3 可调节型多功能亮灯的流水灯设计
  • 3 项目3 直流电机控制
    • 3.1 直流电机的双向转动设计
    • 3.2 转速可调的直流电机转动设计
    • 3.3 多功能直流电机双向转动设计
  • 4 项目4  步进电机控制
    • 4.1 步进电机的双向转动设计
    • 4.2 转速可调的步进电机转动设计
    • 4.3 多功能步进电机双向转动设计
  • 5 项目5 直流电机、步进电机、舵机综合设计
    • 5.1 综合设计
  • 6 项目6 广告灯设计
    • 6.1 在8*8点阵上显示一个字符
    • 6.2 在16*16点阵上显示一个汉字
    • 6.3 在16*16点阵上显示滚动汉字
  • 7 项目7 液晶显示设计
    • 7.1 在1602液晶屏上显示字符
    • 7.2 在1602液晶屏上显示自定义符号和图形
  • 8 电子万年历的制作
    • 8.1 简单万年历的制作
    • 8.2 复杂万年历的制作
    • 8.3 创新万年历的制作
  • 9 作品考核--制作18B20温控风扇
    • 9.1 任务书(拟实现的主要功能)
      • 9.1.1 单片机相关资料
      • 9.1.2 18B20相关资料
      • 9.1.3 PWM脉宽调制资料
      • 9.1.4 74H573介绍
      • 9.1.5 数码管介绍
    • 9.2 原理图、PCB图、焊接图、仿真图
    • 9.3 程序
在8*8点阵上显示一个字符

1、在8*8点阵上显示一个字符



2、在8*8点阵上显示一个字符--程序编写和仿真


3、在8*8点阵上循环显示0-9--程序编写和仿真


显示“B”参考程序:


#include<at89x52.h>


#define uchar unsigned char

#define uint unsigned int


#define ROW P1   //定义P1口为行数据

#define COL P0   //定义P0口为列数据


uchar code led[]={0xff,0xe1,0xdd,0xdd,0xe1,0xdd,0xdd,0xe1}; //B  

uchar i;  


/*-------------------------

函数名称:delay_ms

形    参:uint n:延时时间的长度

功    能:软件延时,延时的单位时间在1ms左右

返 回 值:无 

-------------------------*/

void delay_ms(uint n)

{

uint i;

uchar j;

for(i=0;i<n;i++)

for(j=0;j<120;j++);

}


/*-------------主函数----------*/

void main()

{  

   uchar w;                

   while(1) 

     {  

        w=0x01; //行变量w指向第一行 ,//行数据送P1口       

        for(i=0;i<8;i++)

         { 

    ROW=~w;    //行数据送P1口 

            COL=~led[i]; //列数据送P0口

            delay_ms(100); 

            w<<=1; //行变量左移一位指向下一行  

          }                 

      }            

}

循环显示“0-9”参考程序:

//程序:ex5_3.c

//功能:在8×8LED点阵上循环显示数字0~9

#include<at89x52.h>


#define uchar unsigned char

#define uint unsigned int


#define ROW P1

#define COL P0

uchar code led[]={0x18,0x24,0x24,0x24,0x24,0x24,0x18,0x00,     //0

      0x18,0x1c,0x18,0x18,0x18,0x18,0x3e,0x00, //1

      0x1e,0x30,0x30,0x1c,0x06,0x06,0x3e,0x00, //2

          0x1e,0x30,0x30,0x1c,0x30,0x30,0x1e,0x00, //3

          0x30,0x38,0x34,0x32,0x3e,0x30,0x30,0x00, //4

      0x1e,0x02,0x1e,0x30,0x30,0x30,0x1e,0x00, //5

      0x1c,0x06,0x1e,0x36,0x36,0x36,0x1c,0x00, //6

      0x3e,0x30,0x18,0x18,0x0c,0x0c,0x0c,0x00, //7

      0x1c,0x36,0x36,0x1c,0x36,0x36,0x1c,0x00, //8

      0x1c,0x36,0x36,0x36,0x3c,0x30,0x1c,0x00,}; //9



/*-------------------------

函数名称:delay_ms

形    参:uint n:延时时间的长度

功    能:软件延时,延时的单位时间在1ms左右

返 回 值:无 

-------------------------*/

void delay_ms(uint n)

{

uint i;

uchar j;

for(i=0;i<n;i++)

for(j=0;j<120;j++);

}


/*-------------主函数----------*/

void main()

{  

   uchar w;                       

   uint i,j,k,m; //k表示循环显示字符个数;

                 //m表示每个字符循环扫描次数,即每个字符显示时间  

   while(1) 

   {

      for(k=0;k<10;k++) //字符个数控制变量

      {

         for(m=0;m<10;m++) //每个字符扫描显示20次,控制每个字符显示时间

         {       

            w=0x01; //行变量w指向第一行

            j=k*8; //指向数组led的第k个字符第一个显示码下标

            for(i=0;i<8;i++)

            { 

               ROW=w; //行数据送P1口

               COL=led[j]; //列数据送P0口

               delay_ms(10); 

               w<<=1; //行变量左移指向下一行

               j++; //指向数组中下一个显示码

            }

         }        

      }  

    }

}