求单片机实验七段数码管显示实验程序

求单片机实验七段数码管显示实验程序,第1张

/* ch03-3-4.c - 七段LED数码管实验程序 */

//==声明区=================================================

#include<reg51.h>//定义8051寄存器的头文件,P2-17~19

#define SEG P0 //定义七段LED数码管接至Port 0

/*声明七段LED数码管驱动信号数组(共阳)*/

char code TAB[10]={0xc0,0xf9,0xa4,0xb0,0x99, //数字0-4

0x92,0x83,0xf8,0x80,0x98}//数字5-9

void delay(int) //声明延迟函数

//==主程序==========================================

main() //主程序开始

{ unsigned char i//声明无符号变量i

while(1)//无穷循环,程序一直跑

for(i=0i<10i++) //显示0-9,共10次闭虚族

{ SEG=TAB[i]//显示数字

delay(500) //延迟500×1m=0.5秒

} //for循环结束

} //主程序结束

//==子程序==========================================

/* 延迟函数,延迟约x×1ms */

void delay (int x) //延迟函数誉逗开始

{int i,j //声明整形变量i,j

for (i=0i<xi++) //计数x次,延迟x×1ms

for (j=0j<160j++) //计数120次,延迟1ms

} //延迟函数结束轿弊

#include <reg52.h>

#include <intrins.h>

#define uchar unsigned char

#define uint unsigned int

uchar code DSY_CODE[]=

{

0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90

}

void DelayMS(uint x)

{

uchar t

while(x--)

{

for(t=120t>0t--)

}

}

void main()

{

uchar k,m=0x80

P0=0xff

P2=0x00

while(1)

{

for(k=0k<8k++)

{

m=_crol_(m,1)

P2=m

P0=DSY_CODE[k+1]

DelayMS(2)

}

}

}

程序来自:《卜盯庆单片机C语言程序设计实则梁训100例——基型握于8051+Proteus仿真》

数组是一组有序数据的集合,数组中每一个数据都是同一数据类型。数组中的元素可以用数组名和下标来唯一确定。

数组的一般格式定义如下:

数据类型 数组名[常量表达式] = {元素表};

例如:

unsigned char tabel[3] = [0x3F, 0x06, 0x5B,]

P0 = tabel[0]// P0此时的值为0x3F

数码管动态显示数字 123

#include <reg52.h>

#include <intrins.h>

#define uint unsigned int

#define uchar unsigned char

sbit DU = P2^6//数码管段选

sbit WE = P2^7//数码管段选

// 毫秒级延时函数定义

void delay(uint z){ // 毫秒级延时函数定义

uint x, y

for (x = zx >0x--){

for (y = 114y >0y--){

}

}

}

void main(){ // main函数自身会循环

while(1){

/*第一位显示 数字 1*/

P0 = 0XFF// 清除断码 如果没有为P0 初始化赋值 0XFF,那么 P0的值会是上一个打开段选昌盯野锁存器过程中赋予的值,执行到这里 会把段选值赋给锁存器中P0,导致数码管显示错误。

WE = 1// 打开位选锁存器

P0 = 0XFE // 1111 1110 选通第一位数码管

// P0 = 0X00 // 0000 0000 表示选通所有位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选锁存器

P0 = 0X06 // 0000 0110 显示“1”

DU = 0 // 锁存段选数据

delay(5) // 对每次数码管的切换进行 5毫秒延时 *** 作

/*第二位显示 数字 2*/

P0 = 0XFF// 清除断码

WE = 1// 打开位选锁存器

P0 = 0XFD // 1111 1101 选通第二位数码管

// P0 = 0X00 // 0000 0000 表示选通所有位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选锁存器

P0 = 0X5B // 0101 1011 显示“2”

DU = 0 // 锁存段选数据

delay(5)

/*第三位显示 数字 3*/

P0 = 0XFF// 清除断码

WE = 1// 打开位选锁存器

P0 = 0XFB // 1111 1011 选通第三位数码管

// P0 = 0X00 // 0000 0000 表示选通所有位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选耐喊锁存器

P0 = 0X4F /则亏/ 0100 1111 显示“3”

DU = 0 // 锁存段选数据

delay(5)

}

}

数码管动态显示数字 123 (代码优化)

#include <reg52.h>//包含51头文件

#include <intrins.h>//包含移位标准库函数头文件

#define uint unsigned int

#define uchar unsigned char

sbit DU = P2^6//数码管段选

sbit WE = P2^7//数码管段选

//共阴数码管段选表0-9

uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}

/*====================================

函数 : delay(uint z)

参数 :z 延时毫秒设定,取值范围0-65535

返回值 :无

描述 :12T/Fosc11.0592M毫秒级延时

====================================*/

void delay(uint z)

{

uint x,y

for(x = zx >0x--)

for(y = 114y >0 y--)

}

/*====================================

函数 :display(uchar i)

参数 :i 显示数值,取值范围0-255

返回值 :无

描述 :三位共阴数码管动态显示

====================================*/

void display(uchar i)

{

uchar bai, shi, ge

bai = i / 100//236 / 100 = 2

shi = i % 100 / 10 //236 % 100 / 10 = 3

ge = i % 10//236 % 10 =6

//第一位数码管

P0 = 0XFF//清除断码

WE = 1//打开位选锁存器

P0 = 0XFE//1111 1110

WE = 0//锁存位选数据

DU = 1//打开段选锁存器

P0 = tabel[bai]//

DU = 0//锁存段选数据

delay(5)

//第二位数码管

P0 = 0XFF//清除断码

WE = 1//打开位选锁存器

P0 = 0XFD//1111 1101

WE = 0//锁存位选数据

DU = 1//打开段选锁存器

P0 = tabel[shi]//

DU = 0//锁存段选数据

delay(5)

//第三位数码管

P0 = 0XFF//清除断码

WE = 1//打开位选锁存器

P0 = 0XFB//1111 1011

WE = 0//锁存位选数据

DU = 1//打开段选锁存器

P0 = tabel[ge]//

DU = 0//锁存段选数据

delay(5)

}

void main()//main函数自身会循环

{

while(1)

{

display(123)//数码管显示函数

}

}

数码管动态显示数字 12345678 (代码优化)

#include <reg52.h>//包含51头文件

#include <intrins.h>//包含移位标准库函数头文件

#define uint unsigned int

#define uchar unsigned char

sbit DU = P2^6//数码管段选

sbit WE = P2^7//数码管段选

//共阴数码管段选表0-9

uchar code tabel[]= {0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F,}

/*====================================

函数 : delay(uint z)

参数 :z 延时毫秒设定,取值范围0-65535

返回值 :无

描述 :12T/Fosc11.0592M毫秒级延时

====================================*/

void delay(uint z)

{

uint x,y

for(x = zx >0x--)

for(y = 114y >0 y--)

}

/*====================================

描述 :八位共阴数码管动态显示

====================================*/

void display(uchar num1, uchar num2, uchar num3, uchar num4, uchar num5, uchar num6, uchar num7, uchar num8)

{

/*第一位显示*/

P0 = 0XFF//清除断码

WE = 1//打开位选锁存器

P0 = 0XFE//1111 1110

WE = 0//锁存位选数据

DU = 1//打开段选锁存器

P0 = tabel[num1]//

DU = 0//锁存段选数据

delay(1)

/*第二位显示*/

P0 = 0XFF//清除断码

WE = 1//打开位选锁存器

P0 = 0XFD//1111 1101

WE = 0//锁存位选数据

DU = 1//打开段选锁存器

P0 = tabel[num2]//

DU = 0//锁存段选数据

delay(1)

/*第三位显示*/

P0 = 0XFF//清除断码

WE = 1//打开位选锁存器

P0 = 0XFB//1111 1011

WE = 0//锁存位选数据

DU = 1//打开段选锁存器

P0 = tabel[num3]//

DU = 0//锁存段选数据

delay(1)

/*第四位显示*/

P0 = 0XFF// 清除断码

WE = 1// 打开位选锁存器

P0 = 0XF7 // 1111 0111 选通第四位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选锁存器

P0 = tabel[num4]//

DU = 0 // 锁存段选数据

delay(1)

/*第五位显示*/

P0 = 0XFF// 清除断码

WE = 1// 打开位选锁存器

P0 = 0XEF // 1110 1111 选通第五位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选锁存器

P0 = tabel[num5]//

DU = 0 // 锁存段选数据

delay(1)

/*第六位显示*/

P0 = 0XFF// 清除断码

WE = 1// 打开位选锁存器

P0 = 0XDF // 1101 1111 选通第六位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选锁存器

P0 = tabel[num6]//

DU = 0 // 锁存段选数据

delay(1)

/*第七位显示*/

P0 = 0XFF// 清除断码

WE = 1// 打开位选锁存器

P0 = 0XBF // 1011 1111 选通第七位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选锁存器

P0 = tabel[num7]//

DU = 0 // 锁存段选数据

delay(1)

/*第八位显示*/

P0 = 0XFF// 清除断码

WE = 1// 打开位选锁存器

P0 = 0X7F // 0111 1111 选通第八位数码管

WE = 0// 锁存位选数据

DU = 1 // 打开段选锁存器

P0 = tabel[num8]

DU = 0 // 锁存段选数据

delay(1)

}

void main()//main函数自身会循环

{

while(1)

{

display(1, 2, 3, 4, 5, 6, 7, 8)//数码管显示函数

}

}

更多相关内容

0832+STC89C52RC数码管电压表

采用ADC0832、STC89C52RC制作了数码管显示的数字电压表,电路简洁,初学者容易制作成功。

stc89c52单片机数码管动态显示

在单片机开发板上,通过单片机控制数码管动态显示5201314,并闪烁显示

单片机学习

STC89C52驱动数码管

1.硬件设计数码管实验硬件设计中使用到的数码管是共阳极类型的。因为数码管的片选引脚“1/2/3/4”都通过PNP 三极管来提供高电平,为什么要选用PNP 三极管和共阳极数码管的组合?因为共阳极数码管共阳端直接接电源,... 展开全文

c语言c52数码管

STC89C52单片机数码管介绍以及代码示例

LED数码管:数码管是一种简单、廉价的显示器,是由多个发光二极管封装在一起组成“8”字型的器件数码管分为共阳极连接和共阴极连接两种:1,共阴极连接就是说3,8这一头连得是负极,所以在下面的那头给上高电平(即置... 展开全文

STC89C52单片机 数码管静态显示

数码管显示原理 数码管根据内部连接不同分为共阴极和共阳极。八段数码管内部有8颗LED组成,如果想要显示特定字形只需控制相应的LED亮起,其他LED熄灭即可。 静态与动态显示 静态显示: LED显示器工作方式有两种:...

STC89C52RC - 12 - 静、动数码管显示

这里的 静态 动态 指的是 数码管 发光的时候 控制它的io口 状态 或者 数码管 发光段的状态 1、硬件介绍 1数码管 分为 共阴或者共阳 数码管里面封装的都是 LED小灯珠 共阳 阳极都连在一起 阳极接正 负极都是分开...

8051单片机实战分析(以STC89C52RC为例) | 06 - 动态数码管驱动

#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器 typedef unsigned int u16 //对数据类型进行声明定义 typedef unsigned char u8sbit LSA=P2^2sbit LSB=P2^3sbit LSC=P2^4u8 code ...

动态扫描

延时函数液晶时钟_数码管_时钟_STC89C52_

基于stc89c52的数码管时钟按键修改时间晶振频率11.0592

STC89C52与数码管的详细接线图

适合静态显示,共阳数码管或共阴数码管都可以

stc89c52单片机开发板电路原理图

stc89c52单片机开发板电路原理图。主要包括模拟量采集ADC,AD/DA转换。485传输,点阵模块接口,红外发送,温湿度传感器,蜂鸣器,超声波模块,按键,指示灯,最小系统,外扩接口,USB供电以及串口传输,4位七段...

Dan_数码管_STC89C52_

基于stc89c52单片机,在数码管上左右移动显示字符

STC89C52单片机 数码管动态显示_ʚVVcatɞ的博客_单片机数...

WE = 1// 打开位选锁存器 P0 = 0XFE// 1111 1110 选通第一位数码管 // P0 = 0X00// 0000 0000 表示选通所有位数码管 WE = 0// 锁存位选数据 DU = 1// 打开段选锁存器 P0 = 0X06// 0000 ...

【Keil5 C51】AT89C52 数码管的动态显示_Lisiluan的博客_keil...

数码管的动态显示原理第一个数码管显示0,1s后第二个数码管显示1,直到第六个数码管显示5后又重新开始#include <reg52.h>#define uint unsigned int#define uchar unsigned char sbit LE_D = P2^6sbit LE_W = P2^7u...

(单片机作业一)STC89C52动态数码管显示520

设计背景 单片机老师要求在520当天,利用手上的单片机,实现一个专属计算机专业的浪漫。 设计基础目的 ... stc89c52做个基础表白 #include<reg51.h>#include<intrins.h>typedef unsign

STC89C52RC单片机学习板PDF原理图+配套试验例程KEIL源码程序(105例)

STC89C52RC单片机学习板PDF原理图+配套试验例程KEIL源码程序(105例): 10 LED循环左移 100.12864液晶基础显示 101.1602动态显示 102.红外解码1602液晶显示 103.红外解码数码管显示 105 NRF24L01开发板一 11 LED循环...

51单片机STC89C52 数码管动态_昵称90天可改的博客

DELAY3 DJNZ R1,DELAY4 CLR RS1 RET TABLEK: 共阴数码管 DB 3FH,06H,5BH,4FH DB 66H,6DH,7DH,07H DB 7FH,6FH,77H,7CH DB 39H,5EH,79H,71H TABLEW: 位选控制 DB 0FEH,0FDH,0FBH,0F7H DB 0EFH,0DFH ...

单片机STC89C52实验 DAY 2 数码管_马踏飞燕&lin_li的博客

动态数码管显示 #include<reg51.h>#include<intrins.h>typedefunsignedcharu8typedefunsignedintu16sbit LSA=P2^2sbit LSB=P2^3sbit LSC=P2^4voiddelay(inti){while(i--)}//段选u8 code smgduan[]={0x3f,0x06,0x5b,...

基于stc89c52的44矩阵键盘输入数码管

本系统以STC89C52单片机为核心,使用4×4矩阵键盘作为数据输入方式,完成独立按键的测试,含有电路图及语言程序设计。

小白上路之51单片机(STC89C52)--数码管

目录数码管介绍显示器及其接口(本文主要针对LED显示器来介绍)开发板原理图数码管是如何显示出字符的静态数码管工作原理数码管静态显示原理74HC573芯片的使用源程序--静态数码管动态数码管工作原理数码管动态显示...

8051单片机(STC89C52)八段数码管轮流显示0~7_好梦成真Kevin的博客-CS...

在8个数码管上自右开始, 轮流显示 0 ~ 7. #include<STC89C5xRC.H>voiddelay()//提供时延 { inti, jfor(i =0i <300i++) for(j =0j <300j++) }

51单片机STC89C52 数码管静态_昵称90天可改的博客

【51单片机】STC89C52数码管静态显示实验,含c代码(5) 1.参考教程:清翔51单片机教程2.基本原理 : 1)数码管位数:几个数码管连在一起,就是几位。 2)数码管共级:共阴极-数码管中间的线是GND。共阳极-数码管中间的线是VCC。用万用...

基于 STC89C52 单片机 DS1302 时钟芯片定时开关的设计

绍一种以STC89C52单片机、DS1302,1602液晶显示为核心,具备调节时间,设置开启时间与关闭时间的定时开关的实现过程。采用C语言编写,与汇编语言相比具有更好的移植性和可读性,便于修改和增减功能,并通过Protues...

基于STC89C52单片机跆拳道比赛计时计分系统设计与实现

采用STC89C52单片机进行控制,设计并实现了一套跆拳道比赛计时计分系统。在进行跆拳道比赛时,可以在计分器上同步显示参赛队伍双方实时得分。该计时计分系统的特点是在比赛进行到一半需要交换场地停止计时,以及在每...

8051单片机实战分析(以STC89C52RC为例) | 05 - 静态数码管驱动

我们看一下数码管内部结构的示意图: 数码管分为共阳和共阴两种: 共阴数码管就是 8 只 LED 小灯的阴极是连接在一起的,阴极是公共端,由阳极来控制单个小灯的亮灭。 同理共阳数码管就是阳极接在一起。 看到这里我们就不难猜出,...

STC 89C52 单片机引脚对应的功能以及实例讲解_Gorit的博客_s...

二、数码管的使用 三、矩阵键盘的使用 四、液晶显示补充 先附上一张stc89C52引脚图 光看引脚是不够的,下面我们看看实物图是什么样子的 一、P1^0~7 对应八个二极管 二级管的实物图如下 从上往下 分别对应引脚中的 P1^0 ~ P1^7...

单片机课设stc89c52.zip

由stc89c52控制的四位倒计时秒表,里边有c语言代码和仿真, 实现的功能如下: 1.通过按键设定倒计时时间; 2.逐秒倒计时; 3.使用4位一体数码管显示时间; 4.时间到数码管闪烁显示0000

基于单片机STC89C52的LED数码管温度显示及报警器的实现

基于单片机STC89C52的LED数码管温度显示及报警器的实现,资源不错,希望对您有用。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12500248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存