单片机STC89C52
单片机是典型的嵌入式微控制器(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相关推荐
- stc89c51单片机音乐盒系统设计_基于单片机STC89C52的数字音乐盒设计
基于单片机STC89C52的数字音乐盒设计 1基于单片机 STC89C52 的数字音乐盒设计一. 引言1.1 设计的目的通过课程设计,让学生熟悉单片机微机应用系统开发.研制的过程,软硬件设计的工作方法 ...
- 【51单片机STC89C52】IO口模拟PWM控制SG90舵机
一.PWM PWM ,英文名 Pulse Width Modulation ,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进 行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编 ...
- 51单片机(STC89C52)的中断和定时器
STC89C51/STC89C52 Timer 内部不带振荡源, 必须外接晶振 采用11.0592MHz,或22.1184MHz,可方便得到串口通讯的标准时钟. STC89和STC90系列为12T, ...
- #单片机# ------ stc89c52引脚说明
STC89C52功能简述: STC89C52 是一种低功耗.高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器.使用高密度非易失性存储器技术制造,与工业80C51产品指令和引脚完全兼容. ...
- 【51单片机STC89C52】串口通信(蓝牙)
目录 一.串口 1.串口基本认知 2.串口通信 3.串口编程寄存器 串行口相关寄存器 串行口控制寄存器SCON和PCON STC-ISP工具波特率计算器 串口初始化编程实现 二.发送一个字符'a'给P ...
- 51单片机(STC89C52)在Ubuntu下的开发
简介 都是8051衍生的8位单片机, STC单片机有89/90/10/11/12/15这几个大系列, 每个系列的特点如下 89系列是传统的8051单片机, 烧录方法有区别, 但是功能上可以和AT89系 ...
- 51单片机STC89C52点亮一个LED(IO口的位操作)
51单片机点亮一个LED(IO口的位操作)STC89C52 程序源码 /*-----------------------包含头文件区域-------------------------*/ #incl ...
- 单片机定时器精准定时_8051单片机(STC89C52)定时器实现10ms精准定时
8051内部集成了2个16bits的计数器, 可以根据需要将其作为定时器使用. 这时, 定时器的计数频率为系统CLK/12. 如果CPU的晶振频率为12MHz, 那么定时器信号源的频率固定为12MHz ...
- 8051单片机(STC89C52)定时器实现10ms精准定时
8051内部集成了2个16bits的计数器, 可以根据需要将其作为定时器使用. 这时, 定时器的计数频率为系统CLK/12. 如果CPU的晶振频率为12MHz, 那么定时器信号源的频率固定为12MHz ...
最新文章
- CodeGen用户定义的扩展令牌
- 什麽是世界上最值得珍惜的
- 【组合数学】生成函数 ( 正整数拆分 | 重复有序拆分 | 不重复有序拆分 | 重复有序拆分方案数证明 )
- asp.net 2.0 语言包 全球化
- ACM竞赛学习整理开篇之01背包问题
- C语言背包问题的算法(附完整源码)
- 1616: 最长回文串(马拉车算法)
- 【Nginx】Nginx配置文件参数/启动参数详解;启动/停止/重新加载配置命令
- Linq(03)基础之Orderby group-by
- Linux 账户信息显示和实现账户安全
- nagios 主机报警别名修改
- 盐城计算机考试时间安排,2019盐城中考具体时间安排 什么时候考试
- 数组中相同元素 java_如何在一维数组中查找某重复元素,并输出其位置?用java实现...
- 7.20-7.24(2)
- 【原】Eclipse部署Maven web项目到tomcat服务器时,没有将lib下的jar复制过去的解决办法...
- 防护等级 ipx9、ipx9k、ip69、ip69k之间的区别
- 计算机内存die,从内存时序的角度告诉你 三星B-DIE为何成为高端所用
- unity自动生成敌人_Unity3D 敌人AI 和 动画( Animator )系统的实例讲解
- 2018厦门大学计算机技术分数线,厦门大学2018年各省市录取分数线
- b B kb kB kbps KBps 换算
热门文章
- 电工学习笔记——示波器交直流耦合的区别
- 第一章 UT单元测试——GoogleTest通用构建说明
- 【解决方案】企业远程行政会议协同办公视频会议EasyRTC如何实现远程办公?
- 杂散干扰解决办法_什么是杂散干扰,互调干扰,阻塞干扰
- Forever Young 永远年轻
- Excel取消工作簿密码【忘记工作簿密码的解决方法】
- idea 检测 重复代码_IntelliJ IDEA 15 EAP,支持动态代码重复检测
- [哈希]PAT1039 Course List for Student
- R语言︱文本(字符串)处理与正则表达式
- 16python学生信息管理系统