首页 > 其他分享 >求助,51单片机定时器中断控制数码管

求助,51单片机定时器中断控制数码管

时间:2025-01-18 16:33:16浏览次数:1  
标签:P1 单片机 位选 51 unsigned 数码管 uint sbit

遇到的问题是:

动态显示时,如果位选变化间隔太小,会导致计数的部分失效,数码管一直显示0000,间隔在30时数字会有变化,但是显示闪烁的效果太明显了
代码如下:


#define uint unsigned int
#define uchar unsigned char
//位选定义
sbit wei0 =P1^3;
sbit wei1 =P1^4;
sbit wei2 =P1^5;
sbit wei3 =P1^6;
//数码管显示段选数组
uint NUM_SEG[10]={0XC0,0XF9,0XA4,0XB0,0X99,0X92,0X82,0XF8,0X80,0X90};
//延时函数
void delay(uint time)
{
	uint i,j;
	for(i=0;i<time;i++)
	{
		for(j=0;j<100;j++);
	}
}
//数码管位选函数
void wei(uint wx)
{
	switch(wx)
	{
		case 0:
			wei0 = 0; wei1=1;wei2=1;wei3=1;
			break;
		case 1:
			wei0 = 1; wei1=0;wei2=1;wei3=1;
			break;
		case 2:
			wei0 = 1; wei1=1;wei2=0;wei3=1;
			break;
		case 3:
			wei0 = 1; wei1=1;wei2=1;wei3=0;
			break;
		default:
     		 wei0 = 1; wei1=1;wei2=1;wei3=1;
			break;
	}
}
//定时器中断初始化函数,用的是定时器0,方式1
void Timer0Init() {
    TMOD = 0x01;                          
    TH0 = (65535-50000)/256; 
    TL0 = (65535-50000)%256; 
		ET0 = 1;
		EA  = 1;
    TR0 = 1;                                      
}
uint count = 0;
uint i = 0;
//中断响应函数
void Timer0() interrupt 1
{
	TH0 = (65535-50000)/256;
	TL0 = (65535-50000)%256;
	//每过1s让i进行自加,加到9999置零
	count++;
	if(count == 20)
	{
		count = 0;
		i++;
		if(i==9999)
		{
			i = 0;
		}
	}
}

//主函数
void main ()
{
	uint ge,shi,bai,qian;//用来显示数码管不同位的数字
	P0=0X00;
	while(1)
	{
		Timer0Init();//定时器中断初始化函数
        //计算数码管显示的数字
		ge=i%10;
		shi=i%100/10;
		bai=i/100%10;
		qian=i/1000;
        //动态显示代码
		wei(3);
		P0=NUM_SEG[ge];//数码管显示
		delay(3);//程序的问题是延时短的话数码管显示为0000,延时设置为30,就可以正常显示数字变化,但是闪烁问题严重
		wei(2);
		P0=NUM_SEG[shi];
		delay(3);
		wei(1);
		P0=NUM_SEG[bai];
		delay(3);
		wei(0);
		P0=NUM_SEG[qian];
		delay(3);
	}
} 

标签:P1,单片机,位选,51,unsigned,数码管,uint,sbit
From: https://www.cnblogs.com/fdzd/p/18678562

相关文章

  • STM32单片机的学习总结
    从计算机基础、寄存器知识、汇编指令、中断以及各外设驱动的开发,单片机底层经过这段时间的学习做一个总结。计算机组成计算机由输入设备、输出设备、控制器、运算器、存储器组成,存储器分为外部存储器、内部存储器、高速缓存、寄存器,在单片机底层开发中,主要使用寄存器对某一地......
  • 单片机系统思想基础①
     一、面向MCU1、采样类(物理接口)  模拟采样(ADC采样)、   数字采样(边沿采样、电平采样)2、控制类(物理接口)  PWM控制   DAC控制类   数字输出控制(GPIO输出控制))3、通信类(物理接口)  串口通信   SPI通信   IIC通信   USB通......
  • 877、基于51单片机的直流电机仿真设计(正反转,加减速,启停)
    毕设帮助、开题指导、技术解答(有偿)见文末。目录一、设计功能二、proteus仿真三、原理图四、程序源码五、资料包括一、设计功能51单片机实现直流电机正反转、加减速、启动和停止。用LCD显示电机工作状态二、proteus仿真三、原理图四、程序源码五、资料......
  • CF516E Drazil and His Happy Friends 做题记录
    CF516EDrazilandHisHappyFriendsDescription有\(n\)个男生\(m\)个女生,编号分别为\(0\simn-1\)和\(0\simm-1\)。有\(B\)个男生和\(G\)个女生是快乐的,其他人是不快乐的。在第\(i\)天,编号为\(i\bmodn\)的男生和编号为\(i\bmodm\)的女生会一起......
  • 1. 数码管的静态动态控制
    数码管,我的超级LED![[Pastedimage20250116130225.png]]![[Pastedimage20250116134916.png]]![[Pastedimage20250116130421.png]]多个数码管共引脚连接节省接口在同一个时刻相同引脚的数码管只能显示相同内容动态数码管显示是根据人眼视觉残留与数码管余辉实现的图中C......
  • 51c大模型~合集106
    我自己的原文哦~   https://blog.51cto.com/whaosoft/13115290#GPT-5、Opus3.5为何迟迟不发新猜想:已诞生,被蒸馏成小模型来卖「从现在开始,基础模型可能在后台运行,让其他模型能够完成它们自己无法完成的壮举——就像一个老隐士从秘密山洞中传递智慧。」最近几个月,......
  • 51单片机学习日记:独立按键控制LED灯
    我们可以再单片机上看到4个独立的按键,控制一个LED灯的亮灭先用第一个就可以,我们先找到独立按键的原理图来看看如何通过按键来控制LED灯的亮灭;独立按键的一段接地,另一端接P3,则我们按下按键时会使端口为低电平,我们就可以通过逻辑:当P31=0(按下去按键)时让灯亮,当P31=1时灯灭。(大......
  • 单片机毕业设计之stm32单片机物联网远程心率血氧MAX30102健康监控系统,老人健康监测+行
    一、设计简介        本项目旨在利用STM32F103C8T6微控制器为核心,构建一个实时人体健康监测系统。该系统集成了多种传感器和模块,能够全面、准确地监测并显示人体的关键健康数据,同时提供异常报警功能,还通过蓝牙通信功能实现了数据的远程传输和记录,方便用户随时了解自己......
  • 基于STM32单片机自动售货机扫码支付无人超市语音播报无线蓝牙APP/WIFI-APP控制/WIFI视
    STM32-S147语音播报+二维码付+4种商品+4路电机出货+选货+手付+库存+缺货+找零+声光+按键+TFT屏+(无线方式选择)产品功能描述:本系统由STM32F103C8T6单片机核心板、1.44寸TFT彩屏、(无线蓝牙/无线WIFI/无线视频监控模块-可选)、步进电机控制电路、语音播报模块接口、蜂鸣器报警电......
  • JSP驴友网站管理系统w51si程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、研究背景随着旅游业的繁荣和驴友文化的兴起,越来越多的驴友倾向于通过网络平台获取旅游信息、分享旅行经验。为了满足驴友群体的需求,构建一个功......