89C51数码管循环显示数字0~15

89C51数码管循环显示数字0~15,使用Proteus经行仿真。

需要材料:

  数码管、AT89C51、最小系统电路、

在这里插入图片描述

代码如下:


//-----------------------------------------------------------------------------------
//程序名:  SMG7-4
//程序功能:P0端口输出,一位数码管循环显示0~15
//-----------------------------------------------------------------------------------
#include <reg51.h>
//定义位操作
sbit ls1=P2^0;                                     //个位公共极
#define Out P0                                     //定义数据输出端口
void delay10ms(unsigned int count); 
unsigned char i=0;

//共阳数码管数字显示表
unsigned char tab[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E}; 
// 对应显示            0    1    2    3    4    5    6    7    8    9   A    B   C    D     E    F

//-----------------------------------  主函数 ----------------------------------
main()
 { 
   ls1=1;                                         //个位共阳极数码管供电 
   while(1)                                       //无限循环
    {
      Out=tab[i];                                 //输出
      i=(i+1)%16;                                 //i加1,指向表中下一个码
	  delay10ms(300);                             //调用延时函数
	}
 }

//------------------------------------ 延时函数 ----------------------------------

void delay10ms(unsigned int count)               //总延时时间为10ms*count 
    {  
      unsigned int i,j,k;          
	  for(i=0; i<count; i++)
        for(j=0; j<10; j++)    
		   for(k=0; k<120; k++);
    }
//-------------------------------------------------------------------------------------

最后效果:

在这里插入图片描述

  • 6
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个基于AT89C51单片机数码管动态显示0-9的简单程序: ``` #include <reg51.h> // 引入AT89C51的寄存器定义 // 数码管段选信号定义 #define SEG_A P1_0 #define SEG_B P1_1 #define SEG_C P1_2 #define SEG_D P1_3 #define SEG_E P1_4 #define SEG_F P1_5 #define SEG_G P1_6 #define SEG_DP P1_7 // 数码管位选信号定义 #define DIGIT_1 P2_0 #define DIGIT_2 P2_1 #define DIGIT_3 P2_2 #define DIGIT_4 P2_3 // 数码管显示数字 unsigned char digits[10] = { 0xC0, // 0 0xF9, // 1 0xA4, // 2 0xB0, // 3 0x99, // 4 0x92, // 5 0x82, // 6 0xF8, // 7 0x80, // 8 0x90 // 9 }; void delay(unsigned int ms) { // 简单延时函数 unsigned int i, j; for (i = 0; i < ms; i++) { for (j = 0; j < 120; j++); } } void main() { unsigned char i; while (1) { for (i = 0; i < 10; i++) { // 循环显示0-9 SEG_A = digits[i] & 0x01; SEG_B = (digits[i] >> 1) & 0x01; SEG_C = (digits[i] >> 2) & 0x01; SEG_D = (digits[i] >> 3) & 0x01; SEG_E = (digits[i] >> 4) & 0x01; SEG_F = (digits[i] >> 5) & 0x01; SEG_G = (digits[i] >> 6) & 0x01; SEG_DP = (digits[i] >> 7) & 0x01; DIGIT_1 = 1; // 显示第1位,其他位为0 DIGIT_2 = 0; DIGIT_3 = 0; DIGIT_4 = 0; delay(10); SEG_A = SEG_B = SEG_C = SEG_D = SEG_E = SEG_F = SEG_G = SEG_DP = 1; DIGIT_1 = 0; DIGIT_2 = 1; // 显示第2位,其他位为0 DIGIT_3 = 0; DIGIT_4 = 0; delay(10); SEG_A = SEG_B = SEG_C = SEG_D = SEG_E = SEG_F = SEG_G = SEG_DP = 1; DIGIT_1 = 0; DIGIT_2 = 0; DIGIT_3 = 1; // 显示第3位,其他位为0 DIGIT_4 = 0; delay(10); SEG_A = SEG_B = SEG_C = SEG_D = SEG_E = SEG_F = SEG_G = SEG_DP = 1; DIGIT_1 = 0; DIGIT_2 = 0; DIGIT_3 = 0; DIGIT_4 = 1; // 显示第4位,其他位为0 delay(10); } } } ``` 这个程序中使用了P1和P2端口来控制数码管的段选和位选信号,通过循环显示0-9来实现动态显示效果。在每次显示一个数字时,先将对应的段选信号设置为0,其他的段选信号设置为1,然后设置对应的位选信号为1,其他的位选信号设置为0,延时一段时间后再将所有的段选信号和位选信号都设置为1。重复这个过程来实现动态显示的效果。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值