中国大学生开发c51单片机点亮流水灯开发原理博客

中国中国大学生开发C51单片机博客

在现代科技发展日新月异的时代,单片机技术在各个领域发挥着重要作用。作为一名中国大学生,我有幸学习并参与了C51单片机的开发工作。在这篇博客中,我将分享我在开发C51单片机过程中所遇到的挑战和收获。

C51单片机是一种广泛应用于嵌入式系统中的微控制器,具有强大的数据处理能力和丰富的外设接口。我在大学期间参与了一个项目,旨在开发一个基于C51单片机的智能家居控制系统。这个系统可以通过手机APP或者语音指令控制家庭中的各种设备,如灯光、电视、空调等。

在项目开始之初,我首先学习了C语言和汇编语言的基础知识,这是编写C51单片机程序的基础。然后,我深入学习了C51单片机的体系结构和编程方式。通过掌握C语言和汇编语言的技巧,我能够编写出高效、稳定的单片机程序。

在项目的硬件设计方面,我学习了电路设计和PCB布局的基本知识。我使用Altium Designer这样的软件工具进行原理图绘制和PCB设计。同时,我还学习了焊接和调试电路的技巧,

c 51 单片机相关概念

 

   

 C51单片机是一种经典的8位嵌入式微控制器,它具有以下相关概念:

1. CPU:中央处理器,是单片机的核心部件,负责执行指令并控制系统的运行。

2. ROM:只读存储器,用于存储程序代码。

3. RAM:随机存取存储器,用于存储临时数据和程序变量。

4. I/O口:输入/输出端口,用于连接单片机与外部设备之间的数据传输。

5. 中断系统:用于处理单片机内部和外部事件的优先级管理。

6. 定时器/计数器:用于计时、计数、脉冲宽度调制等应用。

7. 串口通信:用于单片机与其他设备之间的数据通信。

8. 模拟多路转换器:用于将多个模拟信号转换为单个数字信号。

9. A/D转换器:模拟到数字转换器,用于将模拟信号转换为数字信号。

10. 显示驱动电路:用于控制显示器上的像素点的亮灭状态。

11. 脉宽调制电路:用于控制信号的占空比,从而改变信号的波形形状。

12. 模拟多路转换器和A/D转换器:用于将模拟信号转换为数字信号,以便进行数字处理。

这些概念是C51单片机硬件结构的重要组成部分,它们的组合和使用可以实现各种嵌入式应用程序。 

学习C51单片机可能会遇到以下难懂的点:

1. 汇编语言:C51单片机使用汇编语言编写程序,对于初学者来说,汇编语言的语法和指令集可能会比较难以理解。

2. 中断系统:中断系统是单片机内部和外部事件的优先级管理系统,需要理解优先级、中断向量表、中断优先级等概念。

3. 定时器/计数器:定时器/计数器用于计时、计数、脉冲宽度调制等应用,需要理解计数器、定时器、模式寄存器等概念。

4. 串口通信:串口通信是单片机与其他设备之间的数据通信方式之一,需要理解波特率、数据位、停止位等概念以及串口的寄存器配置。

5. 显示驱动电路:显示驱动电路用于控制显示器上的像素点的亮灭状态,需要理解像素点的工作原理、驱动电路的设计等概念。

6. 模拟多路转换器和A/D转换器:模拟多路转换器和A/D转换器用于将模拟信号转换为数字信号,需要理解模拟信号的特性、转换器的工作原理等概念。

7. 中断处理程序:中断处理程序是单片机内部或外部事件发生时自动执行的程序,需要理解中断向量表、中断优先级等概念。

8. 编程方法:C51单片机的编程方法与其他编程语言不同,需要掌握一些特殊的编程技巧和方法,例如中断程序的编写、中断处理程序的嵌套

 c51单片机流水灯开发点亮

#include <reg52.h>

#define uchar unsigned char    // UINT8, u8
#define uint unsigned int      // UINT16, u16
#define GPIO P0
#define GPIO2 P2
#define XMS 5

float temp = 21.5;    // temp*10 = 215

uchar SEG_Code[] = {0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8,
                    0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E}; 

uint Temp_Buffer[4] = {0, 0, 0, 0};             // 温度数据的缓冲区
uchar SEG_Bit[4] = {0xFE, 0xFD, 0xFB, 0xF7};     // 数码管位选端位码

void delay_xms(uint xms);
void Data_Process();

void main(void)
{
    uchar i;
    GPIO = 0xFF;     // 初始化端口
    GPIO2 = 0xFF;
    while(1)
    {
        Data_Process();
        for(i=0; i<4; i++)
        {
            if(i == 2)
                GPIO = SEG_Code[Temp_Buffer[i]] & 0x7F;  // 80: 0111 1111
            else
                GPIO = SEG_Code[Temp_Buffer[i]];
            GPIO2 = SEG_Bit[i];
            delay_xms(XMS);
            GPIO = 0xFF;           // 消隐
        }
    }
}

void Data_Process()
{
    Temp_Buffer[3] = (int)(temp*10) / 100;        // 2
    Temp_Buffer[2] = (int)(temp*10) % 100 / 10;   // 1
    Temp_Buffer[1] = (int)(temp*10) % 10;         // 5
    Temp_Buffer[0] = 12;                          // C
}

void delay_xms(uint xms)
{
    uint i;
    while(xms--)
    {
        for(i=0; i<234; i++);
    }
}

l 流水灯连续点亮代码

#include <reg52.h>

#define uint unsigned int
#define uchar unsigned char

sbit KEY1 = P3^1;
sbit LED1 = P2^0;

uchar KeyFlag;             // 声明按键的标志位:为1时按下,为0时没按下

void Key_Scan();           // 声明按键扫描函数
void delay_xms(uint xms);

void main(void)
{
    P2 = 0xFF;
    P3 = 0xFF;
    while(1)
    {
        Key_Scan();
        /*if(KeyFlag == 0)
        {
            LED1 = 1;
        }
        else
        {
            LED1 = 0;
            KeyFlag = 0;
        }*/
        
        if(KeyFlag == 1)
        {
            LED1 = ~LED1;
            delay_xms(200);
        }
    }
}

void Key_Scan()
{
    if(KEY1 == 0)
    {
        delay_xms(10);
        if(KEY1 == 0)
        {
            KeyFlag = 1;   // 识别了按键已按下,锁定按键按下状态
        }
    }
    else
    {
        KeyFlag = 0;
    }
}

void delay_xms(uint xms)
{
    uint i;
    while(xms--)
    {
        for(i=0; i<234; i++);
    }
}

 

 

...全文
225 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

1,364

社区成员

发帖
与我相关
我的任务
社区描述
柳职院电子信息工程学院同学们的学习园地
社区管理员
  • c_university_1974
  • qq_39231145
  • zhuisir
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

各位加入社区的同学,请完善社区信息,把社区昵称改为【班级-姓名】,社区签名改为【班级-学号-姓名】的格式

如【社区昵称】20计应1班  张某某(班级用简称)

     【社区签名】2020级计算机应用技术1班 20201234567 张某某 (班级用全称)

试试用AI创作助手写篇文章吧