// File Name: 按键控制数码管循环显示
// Author: hhhmxk
// Date: 2020.10.25
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit key = P3^4;
sbit w1 = P3^0;
sbit w2 = P3^1; // 数码管位选端口
#define dx P2 // 数码管段选端口
u8 code seg_tab[] = {
0x40, 0x79, 0x24, 0x30, 0x19,
0x12, 0x02, 0x78, 0x00, 0x10
}; // encode
void display(u8 num);
void delay_ms(u16 num);
void main()
{
u8 count;
count = 0;
while(1)
{
if(key == 0)
{
delay_ms(10);
if(key == 0)
{
count = count==60? 0 : count+1;
while(!key); // 松手检测
}
}
display(count);
}
}
void display(u8 num)
{
u8 shiwei, gewei; // 数字的十位 个位
shiwei = num/10; //取模 34/10 = 3
gewei = num%10; //取余 34%10 = 4
w1 = 1; //高位位选
dx = seg_tab[shiwei] | 0x80; //去掉后面的小点 下面同理
delay_ms(2);
w1 = 0;
w2 = 1; //低位位选
dx = seg_tab[gewei] | 0x80;
delay_ms(2);
w2 = 0;
}
void delay_ms(u16 num)
{
u16 x, y;
for(x = num; x > 0; x--)
for(y = 110; y > 0; y--);
}
关键字:51单片机 按键控制 数码管 循环显示
引用地址:
51单片机按键控制两位数码管循环显示0~60
推荐阅读最新更新时间:2026-03-25 11:21
51单片机之数码管动态循环左移显示手机号
课设题目:数码管手机号 要求:四位一体共阴数码管循环左移显示手机号,显示完成蜂鸣器响一次,重复循环 一:共阴极数码管16进制编码1~f如下: uchar code table = {0x3f,0x06,0x5b,0x4f, 0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c, 0x39,0x5e,0x79,0x71}; 二:proteus中各元件符号表示:CRYSTAL 晶振 ;电解电容:CAP-即可搜到;电阻:res; 7SEG-MPX4-CC 四个共阴二极管显示器 1234 是阴公共端; 排阻:respack 三:总体电路图 实物图:(前三位的手机号,太懒,不想上传太多图片了)
[单片机]
89C51单片机按键控制数码管动态显示0~9
1.preteus仿真图 2.keli代码 #include reg51.h sbit key1=P3^0; int CC_num ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; int CC_I=0; void delay_ms(int ms) { int i,j; for(i=0;i ms;i++) for(j=0;j 110;j++); } void key1_exam() { if(key1 == 0) { //按钮延时去抖动 delay_ms(20); if(key1 =
[单片机]
51单片机 矩阵按键控制数码管显示0~F
通过按下4*4矩阵按键让数码管显示对应的数值 #include reg52.h typedef unsigned char u8; typedef unsigned int u16; u8 code smgduan ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //0 1 2 3 4 5 6 7 8 9 A b C d E F u16 key_value; void delay(u16 i) { while(i--); } void keyscan() { P1=
[单片机]
51单片机程序——按键控制单个数码管显示
#include reg52.h unsigned char code table ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,};// 显示数值表0-9 void main (void) { while(1) //主循环 { P1 = 0x01; //打开数码管的位选 P3 = 0xff; switch(P3) //P3口作为独立按键输入端,检测端口电平并做如下判断
[单片机]
用单片机AT89C51驱动两位数码管显示00--99依次循环程序代码
;两位数码管显示00--99依次循环 org 0000h a_bit equ 20h ;数码管个位数存放内存位置 b_bit equ 21h ;数码管十位数存放内存位置 temp equ 22h ;计数器数值存放内存位置 star: mov temp,#0 ;初始化计数器,从0开始 stlop: acall display;调用显示子程序 inc temp;对计数器加1 mov a,temp cjne a,#100,next ;判断计数器是否满100? mov temp,#0;满100就清零重新开始 next: ljmp stlop;不满就循环执行 ;显示子程序 display: mov a,temp ;将temp中的十六
[单片机]
单片机(51) 数码管0-9循环显示(软件延时)
#include regx51.h unsigned char code led ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay_50ms(unsigned int i){ while(i--); } void main(void){ char i=0; while(1){ for(i=0;i 10;i++){ P1=led ; delay_50ms(60000); } } }
[单片机]
数码管循环显示0-9 C语言程序设计
//用LED数码显示器循环显示数字0~9 #include reg52.h // 包含51单片机寄存器定义的头文件 /************************************************** 函数功能:延时函数,延时一段时间 ***************************************************/ void delay(void) { unsigned char i,j; for(i=0;i 255;i++) for(j=0;j 255;j++) ; } /********************************************
[单片机]
数码管(STC89C52): 第一个数码管循环显示0~F
一. 硬件设计 说明: 选通一个数码管分两步, 第一步是位选,即选择哪个数码管亮, 这里位选是通过锁存器U2的WE1~WE6来选择第一个数码管到第六个数码管,由于数码管为共阴极(相对于8位数码管),那么这里WE端为0代表位选选通, 第二步是段选,即选择数码管的哪位亮, 这里段选是通过锁存器U1的a~h来选择数码管的8位管子,这里DUAN端为1代表段选选通. 二. 程序设计 1. 程序功能 第一个数码管循环显示0~F 2. 程序源码 #include reg52.h #define uchar unsigned char #define uint unsigned int sbit d
[单片机]