【AT89C52单片机项目】99累减器

  • 实验目的

掌握STC89C52RC单片机最小系统构成,最小系统由单片机芯片、时钟电路及复位电路组成。

掌握STC89C52RC单片机开发板与数码管的原理图、控制方式。

掌握对单片机I/O的复杂控制

熟练掌握C语言的设计和调试方法。

  • 实验仪器

一套STC89C52RC开发板套件,包括STC89C52RC开发板,以及USB烧录线。

  • 设计要求

使用STC89C52RC的I/O控制、调配数码管,使得数码管能够在相应的位置显示出99累减。

  • 实验原理

通过观察原理图使用I/O口进行数据的控制,通过段码与位码分别控制数码管的数字、以及控制哪个数码管进行数字显示,最后通过循环函数实现99累减的功能,在预计的数码管上显示。

  • 实验流程
  1. 根据教材进行学习数码管显示控制,本项目单片机为八段共阴数码管,段码为{ 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f},分别表示0~9
  2. 根据教材进行学习定时器相关知识,学习教材上的99累减代码。
  3. 将代码烧录进入单片机
  • 实验结果

单片机数码管上数字从99开始递减直至00。

【AT89C52单片机项目】99累减器_第1张图片 【AT89C52单片机项目】99累减器_第2张图片
【AT89C52单片机项目】99累减器_第3张图片 【AT89C52单片机项目】99累减器_第4张图片
【AT89C52单片机项目】99累减器_第5张图片 【AT89C52单片机项目】99累减器_第6张图片
  • 代码
#include 

#define DataPort P0  //定义数据端口
sbit LATCH1 = P2 ^ 6; //定义锁存使能端口 段锁存
sbit LATCH2 = P2 ^ 7; // 定义锁存使能端口 位锁存

unsigned char code DuanMa[] = { 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管段码表

unsigned char code WeiMa[] = { 0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; //位码表

unsigned char TempData[8];  //用来存放数码管数据
void Delay(unsigned int t);  //延迟函数
void Display(unsigned char FirstBit, unsigned char Num); //数码管显示函数
main()
{
    unsigned char num = 99;  //设置初始数字为99
    unsigned int j = 0; //设置初始变量j用于计数,与累减器数字变化的时间相关
    while (1)
    {
        j++;
        if (j == 500) //这个数字与数码管数字变化时间有关
        {
            j = 0;
            if (num > 0)
            {
                num--; //控制累减器数字递减
            }
            else
            {
                num = 99; //当数字为00时,数字重置为99
            }
        }
        TempData[0] = DuanMa[num / 10]; //取十位数
        TempData[1] = DuanMa[num % 10]; //取个位数

        Display(2, 2);
    }
}

void Delay(unsigned int t)
{
    while (t--)
    {

    }
}
void Display(unsigned char FirstBit, unsigned char Num)
{
    unsigned char i;
    for (i = 0; i < Num; i++)
    {
        DataPort = 0; //清空数据,防止有交替重影
        LATCH1 = 1;
        LATCH1 = 0;

        DataPort = WeiMa[i + FirstBit];  //取位码
        LATCH2 = 1;   //位锁存
        LATCH2 = 0;

        DataPort = TempData[i];  //取显示数据,段码
        LATCH1 = 1;   //段锁存
        LATCH1 = 0;

        Delay(200); //扫描间隙延时,时间太长会闪烁
                    //太短会造成重影
    }
}

你可能感兴趣的:(单片机项目学习,c++,嵌入式硬件,单片机,项目学习)