单片机是典型的嵌入式微控制器(Microcontroller Unit),由运算器,控制器,存储器,输入输出设备等构成,相当于一个微型的计算机
    STC89C52RC是STC公司生产的一种低功耗、高性能CMOS8位微控制器,具有8K字节系统可编程Flash存储器。STC89C52使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统51单片机不具备的功能。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得STC89C52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。本篇文章以STC89C52为例.

本博客分几部分,如下:
1.实验一:LED灯点亮实验.
2.实验二数码管静态显示实验.


下面给出该单片机的开发原理图.



实验一:LED灯点亮实验.

实验原理:

    LED 发光二极管具有单项导通性,通过 5mA 左右的电流就能正常点亮发光二极管, 电流越大,LED 的亮度就越强,但是如果通过的电流过大, 就会烧毁 LED,电流一般 有控制在 3~20mA,电路图中的 1K 的上拉电阻的作用就是限制通过 LED的电流,可称为 “限流电阻” 。

    电路中 LED 采用的是共阳的接法,正极接一个限流电阻再接到电源,负极接到单片 机的引脚,把单片机引脚的电平拉低就能点亮 LED。

代码如下:

//点亮一个LED灯
#include <reg52.h>    //此文件中定义了 52 的一些特殊功能寄存器
sbit LED1=P1^7;//声明端口
void main() {    LED1  = 0; //置 P1_7 口为低电平 ,点亮 LED
}

课外拓展:

//左向右流,库函数_crol_实现..右向左就用_cror_
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int;
void delayZms(uint Z){int i,j;for(i=1;i<Z;i++){for (j=1;j<113;j++);}
}
void main(){uint a;a=0xfe;//P1端口对应8个管脚,0xfe就是给寄存器赋值,最低位低电平,其他高电平..while(1){P1=a;  //亮灯..a=_crol_(a,1);   //循环左移,最高位放入最低位,其他位依次左移一位.delayZms(500);    //延迟500ms输出.}
}

不用库函数实现跑马灯.


/*************************************************
实现函数功能:正向流水点亮LED
**************************************************/
#include <reg52.h>
#define uint unsigned int;
void forward(void)
{P1=0xfe;         //第一个灯亮delayZms(200);P1=0xfd;         //第二个灯亮delayZms(200);P1=0xfb;          //第三个灯亮delayZms(200);P1=0xf7;          //第四个灯亮delayZms(200);P1=0xef;          //第五个灯亮delayZms(200);P1=0xdf;          //第六个灯亮delayZms(200);P1=0xbf;          //第七个灯亮delayZms(200);P1=0x7f;          //第八个灯亮delayZms(200); P1=0xff;P1=0xfe;         //第一个灯亮delayZms(200);
}
void delayZms(uint Z){int i,j;for(i=1;i<Z;i++){for (j=1;j<113;j++);}
}
void main(){while(1){forward();}
}

对于以上的改进,循环点亮LED灯.

#include <reg52.h>
#define uchar unsigned char;
#define uint unsigned int;
uchar code ledTable[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};   //不同灯端口对应的十六进制
void forward(){int i;for (i=0;i<8;i++){P1=ledTable[i];   //依次点亮灯delayZms(100);   //延迟100ms输出}
}
void delayZms(uint Z){int i,j;for(i=1;i<Z;i++){for (j=1;j<113;j++); //延迟函数}
}
void main(){while(1){forward(); //调用函数}
}

数码管静态显示实验

相应的寄存器

实验原理图.

介绍代码之前先了解一些概念:
共阴极: 位选为低电平(即0)选中数码管, 各段选为高电平(即1接+5V时)选中各数码段(0~f)
共阳极: 位选为高电平(即1)选中数码管, 各段选为低电平(即0接地时)选中各数码段(0~f)

共阴数码管段选表,无小数点:
unsigned char code distab[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d, 0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

共阳数码管段选码表,无小数点:

unsigned char code distab[16]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};

共阳数码管位选表-8个:
unsigned char code distab[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};//位选

简单来讲:

  • 段选和位选是指单片机在控制数码管的时候,有2个部分,一个是位选,选择哪一位数码管可以通电(一般数码管都是有多位的)既被选中,二是段选,每一位都有8个段(一个数码管是由8个段构成的,一个段可以看成是一个小灯)段选控制被位选选中的这个数码管需要显示的数字。数码管要有显示需要两个条件,既一,位选被选中,二,有段选值(需要显示的图案或数字)
  • 如在第一位显示一个数字,则先在段选端口上输出需要的段选信号,然后置位第一位的位选端口使其第一位置位就可以了。
  • 位选就是你选择那个数码管,段选就是你选择这个数码管a,b,c,d,e,f,g,h这 八段中的哪一段
#include <reg52.h>
#define uchar unsigned char
sbit wela1 = P1^0;  //第一位
sbit wela2 = P1^1; //第二位
sbit wela3 = P1^2; //第三位 uchar code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//不带小数点的共阴数码管段值
void delayms(uchar x) {  uchar i;   while(x--)  {   for(i=0;i<113;i++);  }
} /****************************显示函数***************************/
void display() {       P0=table[0]; //传递数据    P1=0x01; //打开位选    delayms(5); //延时    wela1 = 0;   //关闭位选 P1=0x02; //打开位选    P0=table[1];    delayms(5);    wela2 = 0; P1=0x04; //打开位选    P0=table[2];    delayms(5);    wela3 = 0;
}
void main(void) {     unsigned int  a;      while(1) {for(a=100;a>0;a--) //设置不断显示    display();  }
}
//运行结果,在数码管上显示012

    


未完待续.本文会持续更新到学完该单片机.

鉴于网上代码良莠不齐,因此有必要总结一下,为了更好的学习…
由于本人刚入门,如有一些文章上的不足之处,还请各位大牛指点指点。
我的Github,虽然目前没什么东西.https://github.com/Githubforusc2018/

单片机STC89C52相关推荐

  1. stc89c51单片机音乐盒系统设计_基于单片机STC89C52的数字音乐盒设计

    基于单片机STC89C52的数字音乐盒设计 1基于单片机 STC89C52 的数字音乐盒设计一. 引言1.1 设计的目的通过课程设计,让学生熟悉单片机微机应用系统开发.研制的过程,软硬件设计的工作方法 ...

  2. 【51单片机STC89C52】IO口模拟PWM控制SG90舵机

    一.PWM PWM ,英文名 Pulse Width Modulation ,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编 ...

  3. 51单片机(STC89C52)的中断和定时器

    STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, ...

  4. #单片机# ------ stc89c52引脚说明

    STC89C52功能简述: STC89C52 是一种低功耗.高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器.使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容. ...

  5. 【51单片机STC89C52】串口通信(蓝牙)

    目录 一.串口 1.串口基本认知 2.串口通信 3.串口编程寄存器 串行口相关寄存器 串行口控制寄存器SCON和PCON STC-ISP工具波特率计算器 串口初始化编程实现 二.发送一个字符'a'给P ...

  6. 51单片机(STC89C52)在Ubuntu下的开发

    简介 都是8051衍生的8位单片机, STC单片机有89/90/10/11/12/15这几个大系列, 每个系列的特点如下 89系列是传统的8051单片机, 烧录方法有区别, 但是功能上可以和AT89系 ...

  7. 51单片机STC89C52点亮一个LED(IO口的位操作)

    51单片机点亮一个LED(IO口的位操作)STC89C52 程序源码 /*-----------------------包含头文件区域-------------------------*/ #incl ...

  8. 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时

    8051内部集成了2个16bits的计数器, 可以根据需要将其作为定时器使用. 这时, 定时器的计数频率为系统CLK/12. 如果CPU的晶振频率为12MHz, 那么定时器信号源的频率固定为12MHz ...

  9. 8051单片机(STC89C52)定时器实现10ms精准定时

    8051内部集成了2个16bits的计数器, 可以根据需要将其作为定时器使用. 这时, 定时器的计数频率为系统CLK/12. 如果CPU的晶振频率为12MHz, 那么定时器信号源的频率固定为12MHz ...

最新文章

  1. CodeGen用户定义的扩展令牌
  2. 什麽是世界上最值得珍惜的
  3. 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )
  4. asp.net 2.0 语言包 全球化
  5. ACM竞赛学习整理开篇之01背包问题
  6. C语言背包问题的算法(附完整源码)
  7. 1616: 最长回文串(马拉车算法)
  8. 【Nginx】Nginx配置文件参数/启动参数详解;启动/停止/重新加载配置命令
  9. Linq(03)基础之Orderby group-by
  10. Linux 账户信息显示和实现账户安全
  11. nagios 主机报警别名修改
  12. 盐城计算机考试时间安排,2019盐城中考具体时间安排 什么时候考试
  13. 数组中相同元素 java_如何在一维数组中查找某重复元素,并输出其位置?用java实现...
  14. 7.20-7.24(2)
  15. 【原】Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法...
  16. 防护等级 ipx9、ipx9k、ip69、ip69k之间的区别
  17. 计算机内存die,从内存时序的角度告诉你 三星B-DIE为何成为高端所用
  18. unity自动生成敌人_Unity3D 敌人AI 和 动画( Animator )系统的实例讲解
  19. 2018厦门大学计算机技术分数线,厦门大学2018年各省市录取分数线
  20. b B kb kB kbps KBps 换算

热门文章

  1. 电工学习笔记——示波器交直流耦合的区别
  2. 第一章 UT单元测试——GoogleTest通用构建说明
  3. 【解决方案】企业远程行政会议协同办公视频会议EasyRTC如何实现远程办公?
  4. 杂散干扰解决办法_什么是杂散干扰,互调干扰,阻塞干扰
  5. Forever Young 永远年轻
  6. Excel取消工作簿密码【忘记工作簿密码的解决方法】
  7. idea 检测 重复代码_IntelliJ IDEA 15 EAP,支持动态代码重复检测
  8. [哈希]PAT1039 Course List for Student
  9. R语言︱文本(字符串)处理与正则表达式
  10. 16python学生信息管理系统