单片机实现4位一体数码管显示0000—FFFF的16进制(C语言编程)

作者&投稿:邬锦 (若有异议请与网页底部的电邮联系)
单片机实现4位一体数码管显示0000—FFFF的16进制(C语言编程)怎么编程?~

//段码由P0口输出,P2.3-P2.0依次接位选的高到低
#include
typedef unsigned char u8;
typedef unsigned int u16;
void Delay(void);
void Disp(void);
u16 Cnt;
u8 code LED[]={
0x3F,// 0
0x06,// 1
0x5B,// 2
0x4F,// 3
0x66,// 4
0x6D,// 5
0x7D,// 6
0x07,// 7
0x7F,// 8
0x6F,// 9
0x77,// A
0x7C,// B
0x39,// C
0x5E,// D
0x79,// E
0x71// F
};
void Delay(void)
{
u16 i;
for(i = 0;i < 200;i ++)
;
}
void Disp(void)
{
u8 i,k = 0x01;
for(i = 0;i < 4;i ++)
{
P0 = LED[(Cnt >> (i * 4)) & 0x000f];
P2 = k | 0xf0;
k <<= 1;
Delay();
P0 = 0xff;
P2 &= 0xf0;
}
}
void main(void)
{
u8 i;
Cnt = 0;
while(1)
{
for(i = 0;i < 100;i ++)//显示100次,显示值加1
{
Disp();
}
Cnt ++;
}
}

MOV 70H,#0
MOV 71H,#0
MOV 72H,#0
MOV 73H,#0
KS:
JNB P3.2,LED
LCALL XS
LJMP KS
LED:
GW:
INC 70H
MOV 70H,A
CJNE A,#10,WQ
MOV 70H,#0
GW:
INC 70H
MOV 70H,A
CJNE A,#10,WQ
MOV 70H,#0
GW:
INC 70H
MOV 70H,A
CJNE A,#10,WQ
MOV 70H,#0
GW:
INC 70H
MOV A,70H
CJNE A,#10,WQ
MOV 70H,#0
INC 71H
MOV A,71H
CJNE A,#10,WQ
MOV 71H,#0
BW:
INC 72H
MOV A,72H
CJNE A,#10,WQ
MOV 72H,#0
INC 73H
MOV A,73H
CJNE A,#10,WQ
MOV 73H,#0
WQ:
LJMP KS
XS:

/*四个数码管的动态显示*/

#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit du = P2^6;
sbit we = P2^7;
uchar code table[] = {
0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
uint a;
//---------------------------------------------
void delayms(uint xms)
{
uint i, j;
for(i=xms;i>0;i--) for(j=110;j>0;j--);
}
//---------------------------------------------
void disp()
{
we = 1; P0 = 0xf7; we = 0; //锁存开启 个位 锁存关闭
P0 = table[a % 256 % 16]; delayms(5); //输出个位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭

we = 1; P0 = 0xfb; we = 0; //锁存开启 十位 锁存关闭
P0 = table[a % 256 / 16]; delayms(5); //输出十位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭

we = 1; P0 = 0xfd; we = 0; //锁存开启 百位 锁存关闭
P0 = table[a / 256 % 16]; delayms(5); //输出百位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭

we = 1; P0 = 0xfe; we = 0; //锁存开启 千位 锁存关闭
P0 = table[a / 256 / 16]; delayms(5); //输出千位数
we = 1; P0 = 0xff; we = 0; //锁存开启 消隐 锁存关闭
}
//---------------------------------------------
void main()
{
char i;
a = 0;
while(1) {
for (i = 0; i < 20; i++) disp();
a++;
}
}
//---------------------------------------------

上述的《千百十个》四个位,实际上,显示的是16进制数。

程序,是借用了楼主的《单个显示程序》,但是,和楼主的电路,并不配套。
楼主的电路,并没有锁存器。
而程序中,却是使用锁存器的编程思路。
未必好用,试试看吧。

你这种是需要动态扫描的方式实现多个数码管“一起”显示,
1、先把数码管的段码写出来,放到一维数组里,依次为你要显示的十六进制图形;然后做一个0~65536的全局变量whole_0,初值为零,在定时器中断里累加,做一个每16次whole_0自加1,whole_1自加1……
2、首先你要理解为什么“一起”打上引号,即具体实现的时候实质上不是一起的,先把这部分
3、编写个选位的子函数,一个整形入口参数(用来确定那个数码管亮),不需要返回值,这样为动态扫描做基础
4、在主程序中while(1)
{

位选数码管0;
送字形[whole_0];
延时;

位选数码管0;
送字形[whole_1];
延时;
……//实现动态扫描,反复,注意字形的消隐
}

设一个无符号的整形变量X,正好是0~65535即十六进制的0~ffff。
你只管加就可以了,显示时,变量X&0x0f是最后一位,(X>>4)&0XF是倒数第二
>>8 第二 >>12第一,根据8段码显示就好了

你这样说写程序没有用的,要硬件与软件配合起来写才行的,给你一个思路吧,你可以把每一个数码管的段并在一起,然后记好每一个段的引脚,再后4个位接到单片机的引脚上面,再记好位的引脚,最后你让把每一位按照数码管A-H编好程序,再执行到每一个数码管扫描就行,注意上面说的接到单片机引脚,最好有一个功率放大器,这样不至于损坏单片机,
你看上面都写得清清楚楚的,你就按照硬件把每一个脚抄到单片里面里,查表扫描就完成啦

//段码由P0口输出,P2.3-P2.0依次接位选的高到低
#include<reg51.h>
typedef unsigned char u8;
typedef unsigned int u16;
void Delay(void);
void Disp(void);
u16 Cnt;
u8 code LED[]={
0x3F,// 0
0x06,// 1
0x5B,// 2
0x4F,// 3
0x66,// 4
0x6D,// 5
0x7D,// 6
0x07,// 7
0x7F,// 8
0x6F,// 9
0x77,// A
0x7C,// B
0x39,// C
0x5E,// D
0x79,// E
0x71// F
};
void Delay(void)
{
u16 i;
for(i = 0;i < 200;i ++)
;
}
void Disp(void)
{
u8 i,k = 0x01;
for(i = 0;i < 4;i ++)
{
P0 = LED[(Cnt >> (i * 4)) & 0x000f];
P2 = k | 0xf0;
k <<= 1;
Delay();
P0 = 0xff;
P2 &= 0xf0;
}
}
void main(void)
{
u8 i;
Cnt = 0;
while(1)
{
for(i = 0;i < 100;i ++)//显示100次,显示值加1
{
Disp();
}
Cnt ++;
}
}


问几个数码相机的名词术语
为了消除或减轻这种色偏,数码相机和摄象机可根据不同的光线条件调节色彩设置,以使照片颜色尽量不失真,使颜色还原正常。因为这种调节常常以白色为基准,故称白平衡。 什么叫ISO感光度许多数码摄影爱好者都有过这样的经历:遇到难得的美景,按下了快门,回到家兴致勃勃地打开电脑一看,却发现其中有一些是废片;或者因为曝光不...

14. 微型计算机分为哪几类?
三.按机器字长 4位微处理器 最初的4位微处理器就是Intel 4004,后来改进为4040。目前常见的是4位单片微型机,即在一个芯片内集中了4位的CPU、RAM、ROM、I\/O接口和时钟发生器。这种单片机价格低廉,但运算能力弱、存储容量小,存储器中存放固定程序。这些特点使它们广泛用于各类袖珍计算器进行简单运算,或者用于家用...

PPT是什么,怎么做呀?
在PowerPoint中,可为每个幻灯片设置相应时间,让它到达预定时间后自动切换而无需手工单击切换:先在普通视图中选中幻灯片,再选择“幻灯片放映”→“幻灯片切换”,在“换片方式”下,选择“每隔”复选框,再输入要幻灯片在屏幕上显示的秒数即可。 快速启动幻灯片播放 如果已经制作完成了幻灯片,以后再用到时只是播放幻灯...

如何选择dvd机???
4�童锁功能 童锁功能也是一项十分有用的功能,当播放的碟片中含有暴力凶杀、恐怖或者色情等儿童不宜之片段时,具有童锁功能的DVD机就会自动跳过这些画面,从而避免对少年儿童产生不良影响。不过,童锁功能只适用于具有分级限制系统的碟片,并要通过设置密码来实现此功能。上广电DVD-2380、TCL的DVD-2000等机均具有此童...

相机主要类型有哪些
4.按照相机的快门形式可分为镜头快门照相机(又称中心快门照相机)、焦平面快门照相机、程序快门照相机等。5.按照相机具有的功能和技术特性可分为自动调焦照相机,电测光手控曝光照相机,电测光自动曝光照相机等。此外还有快门优先式、光圈优先式、程序控制式、双优先式、电动卷片(自动卷片、倒片)照相机,自动对焦(AF...

国内有哪些知名的医疗器械生产厂家
京普朗新技术有限公司,普朗医疗是一家集产品研发、生产、销售、服务为一体的综合性医疗器械公司,员工共计数千人。 普朗医疗在北京、南京、广州、成都、南昌等多个省市拥有十八家子公司,产品覆盖检验诊断设备、呼吸麻醉设备、家用设备产品、生物医疗领域以及检验试剂领域在内的医疗行业全产品线,所有...

和的环”1C么?请的移右是中单“循循左数什循移片机5问环指函环
一次位的续11左、11变比1函左 的每移位让1移o依11,向、环名环n位是数循l1移数循11指,是1函环位函,位一循0,r的、环数制,1移0次。r8 ,1,1一位c单名1移位,181。11,等是循或(1115重,量o8进1011n(向11复一__1变 11,取1是1右0量。会 继一_等_”片量就11“...

计算机组装与维修考试重点
下列关于网卡说法不正确的是: 网卡和无线网卡都可以用在电脑上;无线网卡是用在笔记本上的,不能用在台式机上;网卡可以达到千兆速率;每一片网卡上的mac芯片是唯一的 b下列关于声卡说法正确的是: 电脑不需要声卡也可以放音乐;电脑没有声卡就不能正常启动;64位的声卡发出的声音比8位的动听;声卡和网卡是一样的 c...

校办要购置一台一体机,2000元上下,平时收收传真,复印个身份证什么的,哪...
激光一体机也是2000元价位一体机的主要组成部分,和喷墨一体机类似的是,以打印作为主要功能的激光一体机在2000元价位的激光一体机中占了绝大多数,但是笔者介绍的这款产品却绝对是这种“定律”中的异类,它就是惠普 LaserJet 3015激光一体机。传真功能:在功能上惠普 LaserJet 3015是一款具有打印、复印、扫描以及传真功能...

数控车工毕业论文~~采纳了再加100
该模块主要实现与上位机或其他智能设备的串行通信,可用于加工程序的传送等。 图3-4 系统软件原理框图 第4章 硬件系统设计 4.1主模块设计 4.1.1主模块中关键器件及其选型 (1)单片机 本系统采用PHILIPS公司的8位单片机AT89S51为控制核心。AT89S51是一个低功耗,高性能CMOS 8位单片机,片内含4k Bytes ISP(In-system ...

尉犁县18635561131: 单片机实现4位一体数码管显示0000—FFFF的16进制(C语言编程)怎么编程? -
魏胀路得: //段码由P0口输出,P2.3-P2.0依次接位选的高到低#include typedef unsigned char u8; typedef unsigned int u16; void Delay(void); void Disp(void); u16 Cnt; u8 code LED[]={0x3F,// 00x06,// 10x5B,// 20x4F,// 30x66,// 40x6D,// 50x7D,// 60x07,// 70x7F,...

尉犁县18635561131: 编写完整程序实现如下功能,系统有四位共阳数码管,上电后,自动循环显示“0000”1111 2222 -
魏胀路得: ORG 0000H LJMP MAIN ORG 0030H MAIN: MOV P2,#0FH MOV P0,#0C0H LCALL DELAY MOV P0,#0F9H LCALL DELAY MOV P0,#0A4H LCALL DELAY SJMP MAIN DELAY: MOV R2,#200 DLY: MOV R3,#250 DJNZ R3,$ DJNZ R2,DLY RET END

尉犁县18635561131: 单片机程序求助!!(实现4位数码管轮流动态显示0,1,2,3,) -
魏胀路得: ORG 0000HLJMP 0100H MAIN: MOV 60H,#1 ;给显示缓冲区送显示的初值MOV 61H,#2MOV 62H,#3MOV 63H,#4LY: LCALL DISP ;调用显示子程序MOV R3,#15; 延时 LK: LCALL YS1MSDJNZ R3,LKMOV 64H,60HMOV 60H,61H...

尉犁县18635561131: 编写程序实现将单片机内部单元4个十进制数显示出来(四位数码管动态显示) -
魏胀路得: 思路是这样的:送数据->对应的位选->延时->下一位->全部结束后循环 比如:while(1) { //送第一位数据,假设数据总线为P0,data[]为要显示的数据数组 P0 = data[0]; //送位选 P1 = 0x00;//清除其他位 P1.0 = 1; //延时 delay(); //送第一位数据...

尉犁县18635561131: 51单片机(四位数码管的显示)程序基于单片机V1或V2实验系统,
魏胀路得: 下面这个程序是4x4距阵键盘,LED数码管显示,一共可以到0-F显示,你可以稍微改一下就可以实现你的功能了,如还有问题请发信息,希望能帮上你!#includeunsigned ...

尉犁县18635561131: 51单片机控制4位一体的数码管显示的驱动问题!急急急!!! -
魏胀路得: 共阳极数码管的点亮,应该是断码送低电平而数位送高电平点亮,正常驱动时4个数位端应该加三极管分别驱动,4个7段(或8段)并联后直接接入一个P口即可,如果P口需要上拉时应加入10K的排阻.

尉犁县18635561131: 怎么用单片机数码管显示十进制??? -
魏胀路得: 4位数码管最大显示9999小于10000,所以可以按如下处理:千位:n/1000 百位:(n/100)%10 十位:(n/10)%10 各位:n%10

尉犁县18635561131: 单片机试验数码管上如何显示数字 -
魏胀路得: 解决方法: 试验数码管上显示数字( 单片机直接实现位选 共阴极) . 解决方式: 连接方法:P0与J12 用8PIN排线连接 P1与JP16 用排线连接 . 代码:#include#define uint unsigned int #define uchar unsigned char void delay(uint z) ...

尉犁县18635561131: 用单片机控制四位数码管显示“2009 ”的汇编程序 -
魏胀路得: 要程序,不如学会了 程序也得配合硬件,一般是扫描的动态显示的吧,8位数据口,4位选择线.注意,共阴共阳,送数据的码对应为明码暗码 把数据和选择口都设成输出 段码显示做张表,查询

尉犁县18635561131: 四位一体数码管的控制原理 -
魏胀路得: 动态显示驱动:数码管动态显示接口是单片机中应用最为广泛的一种显示方式之一,动态驱动是将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网