51单片机按键时,数码管闪烁会闪烁一下.原因是什么

【已解决】51单片机数码管显示按键状态 - 单片机论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
【已解决】51单片机数码管显示按键状态
17:00:49  
本帖最后由 yettt365 于
19:39 编辑
#include&reg51.h&
#define uint&&unsigned int
#define uchar unsigned char
sbit k1 = P3^1;
sbit k2 = P3^2;
uchar num1& & = 0;
uchar num2& & = 0;
uchar number&&= 0;
uchar key_val = 0;
uchar code table[] ={
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0xff,0xc0,
0xbf,0x7f,
& && && && && && && &};
/**************延时函数↓***********************/
void delay_ms(uint z)
{
& &uint x,
& &for(x = x & 0; x --)
& && & for(y = 125; y & 0; y --);
/**************延时函数↑***********************/
/**************数码管消抖显示函数↓*************/
&&void xs(uchar number)
&&{
& & uchar zheng = 13;
& & uchar fu& & = 12;
& & uchar beiwei&&= number/100;
& & uchar shiwei&&= number/10%10;
& & uchar gewei& &= number%10;
& & if(number &= 0)
& && &{P2 = 0x01; P0 = table[zheng];delay_ms(2);}
else if(number&&& 0 )
{P2 = 0x01; P0 = table[fu];& &delay_ms(2);}
& & P2 = 0X02;
& & P0 = table[beiwei];
& & delay_ms(2);
& & P2 = 0X04;
& & P0 = table[shiwei];
& & delay_ms(2);
& & P2 = 0x08;
& & P0 = table[gewei ];
& & delay_ms(2);
& & delay_ms(2);
&&}
/**************数码管消抖显示函数↑*************/
/**************主函数↓主按键判断***************/
void main(void)
{
& &P0 = 0XFF;&&// 端口置零
& &P1 = 0XFF;
& &P2 = 0XFF;
& &P3 = 0XFF;
& &key_val = P3;
& &while(1)
& &{
& &if(key_val != P3)
& &&&{
& && &key_val = P3;
& && &xs(number);
& && &/******按键加数部分↓******/
& && &while(k1 == 0&&k2 == 1)
& && & {
& && &&&xs(number);//延时消抖
& && &&&if(++num1 & 100)& && &&&//按键时间&1s,num=101;&1s,num=
& && && && & num1 = 101;
& && & }
& && &if(num1 & 0&&num1 &= 100)
& && && &number ++;
& && &else if(num1 & 100)
& && && &number += 10;
& & /******按键加数部分↑******/
& & /******按键减数部分↓******/
& &&&while(k2 == 0&& k1 == 1)
& && & {
& && &&&xs(number);//延时消抖
& && &&&if(++num2 & 100)& && &&&//按键时间&1s,num=101;&1s,num=
& && && && & num2 = 101;
& && & }
& && & if(num2 & 0&&num2 &= 100)
& && && &number --;
& && & else if(num2 & 100)
& && && &number -= 10;
& & /******按键减数部分↑******/
& &&&}
& &&&num1 = 0; num2 = 0;
& &&&xs(number);
& && & 复制代码程序目的:
& && && & 此程序实现按k1键,小于1s,加1,大于1s,加10;&&按k2键,小于1s,减1,大于1s,减10;
& && && &目前已经可以实现此功能。
问题来了:
& && && &不知道是不是当初c语言没学好,在c语言中一个数是否没有负数?0减1后是256;(TH0 = ()/256; 也是256?)
& && && &程序中xs()中有一步是判断number是否小于0:小于,第一个数码管显示“—”;大于,显示“。”&&
& && && && &number似乎永远是&=72
我想应该是c语言基础没学好,&&请指点一下具体那部分内容。谢谢
(160.53 KB, 下载次数: 6)
16:40 上传
proteus电路图
17:34:01  
问题好像是 数据类型的问题,以前一直没注意过,麻烦大家了。
17:50:29  
因为要用到负数,所以要把 uchar 改为 int 或 long 类型(根据你的数值最大值来定类型)。
11:17:31  
starsnow 发表于
因为要用到负数,所以要把 uchar 改为 int 或 long 类型(根据你的数值最大值来定类型)。 ...
改成 int ,char ,lomg 都不行,0--后,直接256,if(number&0),没效果。
16:00:07  
xs()函数是形参是不是无符号型啊????
number应该是有符号的
Powered by&&&&51单片机多位数按键加减(不闪烁)数码管显示
&51单片机多位数按键加减(不闪烁)数码管显示
51单片机多位数按键加减(不闪烁)数码管显示
若举报审核通过,可奖励20下载分
被举报人:
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
课程资源下载排行
您当前C币:&&&可兑换
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
51单片机多位数按键加减(不闪烁)数码管显示
所需积分:0
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
51单片机多位数按键加减(不闪烁)数码管显示
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员数码管闪烁显示,最全面的数码管闪烁显示文章 - 电子工程世界网
数码管闪烁显示
在电子工程世界为您找到如下关于“数码管闪烁显示”的新闻
数码管闪烁显示资料下载
P1口状态分别送入P0、P2、P3口:认识I/O口的引脚功能 5
实例6:使用P3口流水点亮8位LED 5
实例7:通过对P3口地址的操作流水点亮8位LED 6
实例8:用不同数据类型控制灯闪烁时间 7
实例9:用P0口、P1 口分别显示加法和减法运算结果 8
实例10:用P0、P1口显示乘法运算结果 9
实例11:用P1、P0口显示除法运算结果 9
实例12:用自增运算控制P0口8位...
 3.4 花样流水灯
 3.5 LED模拟交通灯
 3.6 单只数码管循环显示0~9
 3.7 8只数码管滚动显示单个数字
 3.8 8只数码管显示多个不同字符
 3.9 数码管闪烁显示
 3.10 8只数码管滚动显示数字串
 3.11 K1~K4控制LED移位
 3.12 K1~K4按键状态显示
 3.13 K1~K4分组控制LED...
频闪功能,请参照第五章 说明操作。同样,在使用频闪功能时,上位机和控制器仍然可对参数进行设置,而不需要进行模式转换,操作简单、方便
第三章 手动操作
每次接通电源后打开控制器,数码管显示输出为上一次关闭控制器前的状态,如上一次关闭控制器前的显示输出“368”,本次打开显示输出也为“368”。按选择键S,数码管中通道显示位“3”开始闪烁,按功能键+和-,便可对通道...
计数器到0时,触发另一个标志变量,进入闪烁状态。显示功能:显示倒计时的数字要采用动态扫描的方式将数字拆成“十位”和“个位”动态扫描显示。如果处于闪烁状态,则可以不需要动态扫描显示,只需要控制共阴极数码管的位控线,实现数码管的灭和亮。键盘扫描和运行模式的切换:主程序在初始化一些变量和寄存器之后,需要不断循环地读取键盘的状态和动态扫描数码管显示相应的数字。根据键盘的按键值实现设置状态、计时状态的切换...
计数器到0时,触发另一个标志变量,进入闪烁状态。显示功能:显示倒计时的数字要采用动态扫描的方式将数字拆成“十位”和“个位”动态扫描显示。如果处于闪烁状态,则可以不需要动态扫描显示,只需要控制共阴极数码管的位控线,实现数码管的灭和亮。键盘扫描和运行模式的切换:主程序在初始化一些变量和寄存器之后,需要不断循环地读取键盘的状态和动态扫描数码管显示相应的数字。根据键盘的按键值实现设置状态、计时状态的切换...
本作品采用Atmel公司的AT89C51单片机,以汇编语言为程序设计的基础,设计一个用四位数码管显示时、分的时钟。在实物图中,左边靠近电源的绿色发光二极管(长亮)是电源指示灯,表示的是5V稳定电源工作正常;单片机左下角红色发光二极管是秒灯,每闪烁一次表示时间走动一秒钟;按键正上方绿色发光二极管是设置灯,当时间正常走动时此时不亮,当第一次按下设置键(右键)时,此绿灯亮,同时秒时熄灭,且分钟的两位...
数码管闪烁显示.rar...
任何尺寸的数码管。BC7281 各位可独立按不同的译码方式译码或不译码显示,译码方式显示时小数点不受译码影响,使用更方便;BC7281A/B 对16 个显示位均可以独立地控制闪烁属性;同时内部还具有一闪烁速度控制寄存器,使用者可随时改变闪烁频率;较之BC7281A,BC7281B增加了显示亮度的控制,可以在正常、半亮和关闭之间切换。BC7281 译码方式除了常用的BCD 译码等2 种方式外,还有专...
数码管闪烁显示(1).rar...
01-LedTest -- 实现LED按照一定频率闪烁。主要用来测试LED工作是否正常。P10要接通。
02-CrossLed -- 实现花灯显示。主要学习对软件延时的使用。P10要接通。
03-FlowRight -- 实现流水灯,方向是从左向右。主要学习在C语言里如何实现准确的位操作。P10要接通。
04-FlowLeft -- 实现流水灯,方向是从右向左。主要学习在C语言...
数码管闪烁显示相关帖子
周立功单片机十年前推出ZLG等键盘管理和数码管显示芯片,只有2/3根通信线,就可以管理64个按键以及8位数码管或者64只LED灯。ZLG开发简单,功能强大,性能稳定,深受开发者的热捧。周立功单片根据客户新的需求,开发出新一代键盘管理和数码管显示芯片—ZLG72128(图 1)。
1&&ZLG72128键盘管理和数码管显示芯片
主要特性...
8位7段数码管驱动实验
实验目的: 1.实现FPGA驱动数码管动态显示;& && && && && &&&2.使用In system sources and probes editor工具,输入需要显示在数码管上的的数据,数码管显示对应数值。实验平台:芯航线FPGA核心板...
........@cruelfox 【12月DIY】SD卡WAV音乐播放器
@hanyeguxingwo& &
PYB Nano驱动8*8LED点阵心形显示
PYB Nano驱动LCD1602A显示
PYB Nano驱动数码管模拟红绿灯
跟着mzb2012 学习pic18 starterkit
pic18 starterkit 学习0x01——关于pic18
键盘扫描数码管显示驱动芯片。芯片型号:ZLG72128
ZLG72128是广州周立功单片机科技有限公司自行设计的数码管显示驱动及键盘扫描管理芯片。能够直接驱动12位共阴式数码管(或96只独立的LED),同时还可以扫描管理多达32个按键。其中8个按键可以作为功能键使用,就像电脑键盘上的Ctrl、Shift、Alt键一样方便快捷,是多按键数码管显示系统的不二选择!该芯片为工业级,抗干扰能力强稳定性...
键盘扫描数码管显示驱动芯片。芯片型号:ZLG72128
ZLG72128是广州周立功单片机科技有限公司自行设计的数码管显示驱动及键盘扫描管理芯片。能够直接驱动12位共阴式数码管(或96只独立的LED),同时还可以扫描管理多达32个按键。其中8个按键可以作为功能键使用,就像电脑键盘上的Ctrl、Shift、Alt键一样方便快捷,是多按键数码管显示系统的不二选择!该芯片为工业级,抗干扰能力强稳定性...
%CH4)响应时间≤20s分辨率0.01%CH4载体催化元件工作电压2.8V,工作电流≤200mA显示方式4位LED电池组1500mAh锰酸锂电池,额定电压Ue:3.7V,最高输出电压Uo:4.2V,最大输出电流Io:3.2A。超量程甲烷冲击保护当甲烷浓度≥4.00% CH4时,数码管闪烁显示“4.00”、报警指示灯闪烁,蜂鸣器间断发出“滴”声。欠压报警当电池电压低于3.30V时,蜂鸣器周期性的...
周立功单片机十年前推出ZLG等键盘管理和数码管显示芯片,只有2/3根通信线,就可以管理64个按键以及8位数码管或者64只LED灯。ZLG开发简单,功能强大,性能稳定,深受开发者的热捧。周立功单片根据客户新的需求,开发出新一代键盘管理和数码管显示芯片—ZLG72128(图 1)。
图 1&&ZLG72128键盘管理和数码管显示芯片
978-7-302-41682-1,内有常用的单片机应用100案例,用于仿真实验操作,电路与程序真实可靠可信可行。
书中电路和程序设计有详细说明,程序语句条条有注解。
本帖最后由 zl2168 于
22:19 编辑
实例92&&开机显示PC机时分秒的时钟1302(LED数码管显示)
时钟显示除了用LCD显示,还可以用LED显示。
⑴ 电路设计...
周立功单片机十年前推出ZLG等键盘管理和数码管显示芯片,只有2/3根通信线,就可以管理64个按键以及8位数码管或者64只LED灯。ZLG开发简单,功能强大,性能稳定,深受开发者的热捧。周立功单片根据客户新的需求,开发出新一代键盘管理和数码管显示芯片—ZLG72128(图 1)。图 1&&ZLG72128键盘管理和数码管显示芯片
主要特性...
而连续有效。
& && & ZLG72128按键管理驱动芯片通过12个位选引脚和8个段选引脚与12位数码管的段位相连;同时12个位选引脚通过电阻又与8x4的矩阵键盘连接。单片机通过I2C与ZLG72128进行通信,同时将硬件复位引脚(RST)和按键信号引脚(INT)连接到单片机上。单片机通过这4个引脚控制ZLG72128来间接完成键盘扫描和驱动数码管显示...
数码管闪烁显示视频
数码管闪烁显示创意
你可能感兴趣的标签
热门资源推荐后使用快捷导航没有帐号?
查看: 4559|回复: 19
按键按下时数码管显示会有些闪烁
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
帮帮忙,按键按下时,数码管会有些闪烁不知道是怎么回事,要如何消除呢?另外该程序还有哪些不足之处请指出。
在此谢谢你们了!电路图在附件里,程序如下:
/*************************************************************
实验效果:用定时器定时来控制继电器的工作,初始时定时为150分钟、
继电器吸合、同时所定的时间在三位数码管上显示出来。开始时定时器
工作,按下S1定时器工作,每过1分钟时间减1,当所定的150分钟减为0时
继电器释放、定时器不工作、数码管不显示单片机进入掉电模式。按下S1、
S2、S3均可唤醒单片机。S1的作用是按下该键时定时器关闭或者启动之间
进行切换,同时数码管显示位置1;S2的作用是按下该键时数码管显示或者
不显示之间进行切换;S3的作用是只有定时器关闭和数码管显示位置1时按
下该键才起作用,每按该键定时时间减15分钟。同时每个按键按下时都会
发出滴的一声。晶振采用12MHZ.
****************************************************************/
#include&STC15F204EA.h&
#include&intrins.h&
#define GPIO_DIG P1
#define Fosc
sbit DS1=P3^7;
sbit DS2=P0^0;/*我所使用的单片机是A版本P0.0。B版本为P5.4*/
sbit DS3=P0^1;/*我所使用的单片机是A版本,所以这里用P0.1。B版本为P5.5*/& && &
sbit S3=P3^0;
sbit S2=P3^2;
sbit S1=P3^3;
sbit BZ=P3^4;
sbit RELAY=P3^5;
int Time, Num=150;
bit flag=1;/*数码管显示位置1显示*/
unsigned char code DIG[10]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde};
void Delay3ms();& & & & & & & & //@12.000MHz
void display(unsigned int b);
& & /*喂狗*/
& & WDT_CONTR=0x34;/*12.000MHz,看门狗溢出时间为1秒左右,溢出之后看门狗复位*/
& & P5M0=0x30;
& & P3M0=0xB0;
&&& & & & P1M0=0XFF;
& & IT1=1;/*外部中断1为下降沿触发方式*/
& & IT0=1;/*外部中断0为下降沿触发方式*/
& & INT_CLKO=0x40;/*允许外部中断4中断*/
& & EX1=1;/*允许外部中断1中断*/
& & EX0=1;/*允许外部中断0中断*/& & & &
& & PX1=1;/*设置外部中断1为高优先级*/
& & TMOD=0x00;/*设定定时器0工作模式为0*/
& & & & AUXR=0x00;/*设定定时器0工作在12T模式*/
& & & & TH0=(65536-Fosc/12/20)&&8;/*给定时器0赋初值,定时50ms*/
& & & & TL0=(65536-Fosc/12/20);
& & & & ET0=1;/*开定时器0中断允许*/
& & & & TR0=0;/*关闭定时器0*/
& & & & EA=1;/*打开总中断*/
& & & & while(1)
& & & & {& & & &
& && &&&WDT_CONTR=0x34;/*12.000MHz,看门狗溢出时间为1秒左右,溢出之后看门狗复位*/
& && &&&/*喂狗*/
& && &&&RELAY=1;/*打开继电器*/
& && &&&if(BZ_flag==1)
& && && && &BZ=1;
& && && && &for(n=7;n&0;n--)
& && && && && & display(Num);
& && && && &BZ=0;
& && && && &BZ_flag=0;& &
& && &&&if(flag==1)/*数码管显示*/
& && && && &display(Num);
& && &&&else/*关闭数码管显示*/
& && && &&&//DS1=1;DS2=1;DS3=1;
& && && && &GPIO_DIG=0;
& & & & }& & & & & & & & & & & && &
void Timr0() interrupt 1
& & & & Time++;
& & if(Time==1200)
& && &&&Time=0;
& && &&&Num--;
& && &&&if(Num&=0)
& && && && &Num=180;
& && && && &RELAY=0;/*关闭继电器*/
& && && && &TR0=0;/*关闭定时器0*/
& && && && &GPIO_DIG=0;/*关闭数码管*/
& && && && &flag=1;
& && && && &PCON=0x02;/*掉电模式,单片机睡觉*/
& && &&&}& &
void Int0() interrupt 0
& & display(Num);/*这个函数执行大约10毫秒时间&&按键延时消抖*/
& & if(S2==0)
& && &&&BZ_flag=1;
& && &&&flag=~/*数码管显示位取反*/
void Int1() interrupt 2
& & display(Num);/*这个函数执行大约10毫秒时间&&按键延时消抖*/
& & if(S1==0)
& && &&&BZ_flag=1;
& && &&&TR0=~TR0;/*定时器0启动关闭切换*/
& && && && &Num--;/*显示时间减1说明定时器0是已经启动或者关闭进行了切换*/
& && &&&flag=1;
void Int4() interrupt 16
& & display(Num);/*这个函数执行大约10毫秒时间&&按键延时消抖*/
& & if(S3==0)
& && &&&BZ_flag=1;
& && &&&if((TR0==0)&&(flag==1))/*当定时器0关闭和数码管显示时才可以进行调节时间*/
& && && && &Num=Num-15;
& && && && &if(Num&=0)
& && && && &Num=180;
void display(unsigned int b)
& & unsigned char bit100,bit10,bit1;
& & & & a=b;
& & & & bit100=a/100;/*提取百位*/
& & & & a=a%100;
& & & & bit10=a/10;/*提取十位*/
& & & & bit1=a%10;/*提取个位*/
& & if(b&=100)
& && &&&DS1=1;
& & & & & & /*送出数字段码*/
& & & & & & GPIO_DIG=DIG[bit100];
& & & & & & DS3=0; /*打开第一个数码的位选*/
& && &&&Delay3ms();
& & & & & & DS3=1;
& & & & & & /*送出数字段码*/
& & & & & & GPIO_DIG=DIG[bit10];
& & & & & & DS2=0;/*打开第二个数码的位选*/
& && &&&Delay3ms();
& && &&&DS2=1;
& & & & & & /*送出数字段码*/
& & & & & & GPIO_DIG=DIG[bit1];
& & & & & & DS1=0;/*打开第三个数码的位选*/
& && &&&Delay3ms();
& & else if((b&=10)&&(b&100))
& && &&&DS1=1;
& && &&&Delay3ms();
& & & & & & /*送出数字段码*/
& & & & & & GPIO_DIG=DIG[bit10];
& & & & & & DS2=0;/*打开第二个数码的位选*/
& && &&&Delay3ms();
& && &&&DS2=1;
& & & & & & /*送出数字段码*/
& & & & & & GPIO_DIG=DIG[bit1];
& & & & & & DS1=0;/*打开第三个数码的位选*/
& && &&&Delay3ms();
& && &&&DS1=1;
& && &&&Delay3ms();
& && &&&Delay3ms();
& & & & & & /*送出数字段码*/
& & & & & & GPIO_DIG=DIG[bit1];
& & & & & & DS1=0;/*打开第三个数码的位选*/
& && &&&Delay3ms();
void Delay3ms()& & & & & & & & //@12.000MHz
& & & & unsigned char i,
& & & & _nop_();
& & & & _nop_();
& & & & i = 36;
& & & & j = 1;
& & & & do
& & & & & & & & while (--j);
& & & & } while (--i);
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间1842 小时
威望3939分
芯币36224枚
E金币181枚
TA的帖子TA的资源
中断里面延时,当然会有闪烁的。
http://www./
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
那要怎么弄呢?
按键按下不是要延时消抖吗?
多想想,延时要怎么写,才不会在循环绕,将mcu都耗在循环了&
在线时间47 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
一粒金砂(中级), 积分 44, 距离下一级还需 156 积分
那要怎麼弄呢?
按鍵按下不是要延時消抖嗎?多想想,延时要怎么写,才不会在循环绕,将mcu都耗在循环了
在线时间2056 小时
威望13829分
芯币29053枚
TA的帖子TA的资源
需要多任务思想才能解决。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在线时间36 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
一粒金砂(中级), 积分 20, 距离下一级还需 180 积分
这个比较麻烦,中断里面占用的时间太多,导致没时间刷屏。
专业电子方案/zigbee方案设计,毕业设计。QQ:
在线时间1328 小时
威望1386分
芯币15653枚
E金币292枚
TA的帖子TA的资源
纯净的硅(高级), 积分 1386, 距离下一级还需 614 积分
纯净的硅(高级), 积分 1386, 距离下一级还需 614 积分
中断的处理,越简短越好
So what......
在线时间131 小时
TA的帖子TA的资源
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
使用定时器中断来扫描显示。定时器的中断优先级设高。
程序更改后,按键按下之后数码管不在闪烁了,但是,我按键按下时蜂鸣器响不知道该放哪儿了,能够给点提示吗?&
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
延时可以用定时器落,但是外部中断里的延时也用定时器来延时吗?这样做不是很复杂吗?
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
你好!什么是多思想任务呢?
在线时间2056 小时
威望13829分
芯币29053枚
TA的帖子TA的资源
例如实时操作系统。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
不太明白你说的意思,能够集体点吗?
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
程序更改后,按键按下之后数码管不在闪烁了,但是,我按键按下时蜂鸣器响不知道该放哪儿了,能够给点提示吗?
看不明白。&
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
/*************************************************************实验效果:用定时器定时来控制继电器的工作,初始时定时为150分钟、继电器吸合、同时所定的时间在三位数码管上显示出来。开始时定时器工作,按下S1定时器工作,每过1分钟时间减1,当所定的150分钟减为0时继电器释放、定时器不工作、数码管不显示单片机进入掉电模式。按下S1、S2、S3均可唤醒单片机。S1的作用是按下该键时定时器关闭或者启动之间进行切换,S2的作用是按下该键时数码管显示或者不显示之间进行切换,S3的作用是只有定时器关闭和数码管显示时按下该键才起作用,每按该键定时时间减15分钟。同时每个按键按下时都会发出滴的一声。晶振采用12MHZ.****************************************************************/#include&STC15F204EA.h&#include&intrins.h&#define GPIO_DIG P1#define Fosc
sbit DS1=P3^7;sbit DS2=P0^0;/*我所使用的单片机是A版本P0.0。B版本为P5.4*/sbit DS3=P0^1;/*我所使用的单片机是A版本,所以这里用P0.1。B版本为P5.5*/& && & sbit S3=P3^0;sbit S2=P3^2;sbit S1=P3^3;sbit BZ=P3^4;sbit RELAY=P3^5;int Time, Num=150;unsigned char bit100,bit10,bit1; unsigned char code DIG[10]={0x7e,0x0c,0xb6,0x9e,0xcc,0xda,0xfa,0x0e,0xfe,0xde};void Delay3ms();& & & & & & & & //@12.000MHzvoid Delay10ms();& & & & & & & & //@12.000MHz
main(){& & & & & && & BZ=0;& & /*喂狗*/& & WDT_CONTR=0x34;/*12.000MHz,看门狗溢出时间为1秒左右,溢出之后看门狗复位*/& & P5M0=0x30;& & P3M0=0xB0;&&& & & & P1M0=0XFF;& & & & IT1=1;/*外部中断1为下降沿触发方式*/& & IT0=1;/*外部中断0为下降沿触发方式*/& & INT_CLKO=0x40;/*允许外部中断4中断*/& & EX1=1;/*允许外部中断1中断*/& & EX0=1;/*允许外部中断0中断*/& & & &
& & TMOD=0x00;/*设定定时器0、1工作模式为0*/& & & & AUXR=0x00;/*设定定时器0、1工作在12T模式*/& & & & TH0=(65536-Fosc/12/20)&&8;/*给定时器0赋初值,定时50ms*/& & & & TL0=(65536-Fosc/12/20);& & & & TH1=(65536-3*Fosc/12000)&&8;/*给定时器0赋初值,定时3ms*/& & & & TL1=(65536-3*Fosc/12000);& & & & ET0=1;/*开定时器0中断允许*/& & & & ET1=1;/*开中断允许*/& & PT1=1;/*设置定时器1为高优先级*/& & & & TR0=0;/*关闭定时器0*/& & & & TR1=1;/*关闭定时器1*/& & & & EA=1;/*打开总中断*/
& & & & while(1)& & & & {& & & &
& && &&&WDT_CONTR=0x34;/*12.000MHz,看门狗溢出时间为1秒左右,溢出之后看门狗复位*/& && &&&/*喂狗*/& & & & & & a=N& & & & & & bit100=a/100;/*提取百位*/& & & & & & a=a%100;& & & & & & & & bit10=a/10;/*提取十位*/& & & & & & & & bit1=a%10;/*提取个位*/& && &&&RELAY=1;/*打开继电器*/
& && &&&if(TR1==0)/*关闭数码管显示*/& && &&&{& && && &&&//DS1=1;DS2=1;DS3=1;& && && && &GPIO_DIG=0;& && &&&}& & & & }& & & & & & & & & & & && &}void Timr0() interrupt 1{& & & & Time++;& & if(Time==20)& & {& && &&&Time=0;& && &&&Num--;& && &&&if(Num&=0)& && &&&{& && && && &Num=180;& && && && &RELAY=0;/*关闭继电器*/& && && && &TR0=0;/*关闭定时器0*/& && && && &GPIO_DIG=0;/*关闭数码管*/& && && && &TR1=0;& && && && &PCON=0x02;/*掉电模式,单片机睡觉*/& && &&&}& && & }}
void Int0() interrupt 0{& & Delay10ms();& & if(S2==0)& & {& && &&&TR1=~TR1;/*数码管显示位取反*/
& & }& & }
void Int1() interrupt 2{& && & Delay10ms();& & if(S1==0)& & {& && &&&TR0=~TR0;/*定时器0启动关闭切换*/& && &&&if(TR0==1)& && && && &Num--;/*显示时间减1说明定时器0是已经启动或者关闭进行了切换*/& & } }
void Int4() interrupt 16{& & Delay10ms();& & if(S3==0)& & {& && && &&&if((TR0==0)&&(TR1==1))/*当定时器0关闭和数码管显示时才可以进行调节时间*/& && &&&{& && && && &Num=Num-15;& && && && &if(Num&=0)& && && && &Num=180;& && &&&}& & } }void Timr1() interrupt 3{
& && && & if(Num&=100)& & { & && &&&switch(n) & && &&&{& && && && &case(0):DS1=1;/*关闭第3位数码管显示*/& && && && && && & & & & && && && && & & & & & GPIO_DIG=DIG[bit100];/*送出数字段码*/& && && && && & & & & & DS3=0; /*打开第一个数码的位选*/& && && && && && &&&& && && && &case(1):DS3=1;/*关闭第1位数码管显示*/& && && && && &&&& && && && && & & & & & GPIO_DIG=DIG[bit10];/*送出数字段码*/& && && && && & & & & & DS2=0;/*打开第二个数码的位选*/& && && && && && &&&& && && && &case(2):DS2=1;/*关闭第2位数码管显示*/& && && && && & & & & & & && && && && & & & & & GPIO_DIG=DIG[bit1];/*送出数字段码*/& && && && && & & & & & DS1=0;/*打开第三个数码的位选*/& && && && && && &&&& && &&&}& & }& & else if((Num&=10)&&(Num&100))& & {& & & && &&&switch(n) & && &&&{& && && && & & && && && &case(0): DS1=1;/*关闭第3位数码管显示*/& && && && && && && && && && && && && & & & & && && && &case(1): DS3=1;/*关闭第1位数码管显示*/& && && && && & & && && && && &&&& & & &&&GPIO_DIG=DIG[bit10];/*送出数字段码*/& && && && && & & & & &&&DS2=0;/*打开第二个数码的位选*/& && && && && && && && && && && &case(2): DS2=1;/*关闭第2位数码管显示*/& && && && && & & & & & & && && && && & & & & &&&GPIO_DIG=DIG[bit1];/*送出数字段码*/& && && && && &&&& & & &&&DS1=0;/*打开第三个数码的位选*/& && && && && && && && && &&&}& & }& & else& & { & && &&&switch(n) & && &&&{& && && && &case(0): DS1=1;/*关闭第3位数码管显示*/& && && && && && && &DS3=1;/*关闭第1位数码管显示*/ & && && && && && && && &&&& & & & & && && && &case(1): DS2=1;/*关闭第2位数码管显示*/ & && && && && && && && && & & && && && &case(2): GPIO_DIG=DIG[bit1];/*送出数字段码*/& && && && && & & & & &&&DS1=0;/*打开第三个数码的位选*/& && && && && && && && && &&&}& & }& & n++;& & if(n&2)& & n=0;}& && &&&
void Delay3ms()& & & & & & & & //@12.000MHz{& & & & unsigned char i,
& & & & _nop_();& & & & _nop_();& & & & i = 36;& & & & j = 1;& & & & do& & & & {& & & & & & & & while (--j);& & & & } while (--i);}void Delay10ms()& & & & & & & & //@12.000MHz{& & & & unsigned char i,
& & & & _nop_();& & & & _nop_();& & & & i = 117;& & & & j = 183;& & & & do& & & & {& & & & & & & & while (--j);& & & & } while (--i);}
在线时间131 小时
TA的帖子TA的资源
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
程序更改后,按键按下之后数码管不在闪烁了,但是,我按键按下时蜂鸣器响不知道该放哪儿了,能够给点提示吗?看不明白。
在线时间39 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
一粒金砂(中级), 积分 142, 距离下一级还需 58 积分
我说的问题看不明白呢?还是我的程序呢?我说我按下按键的时候,要让蜂鸣器响,就刚才那个程序该怎么加入这一功能
在线时间131 小时
TA的帖子TA的资源
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
纯净的硅(初级), 积分 701, 距离下一级还需 99 积分
“按键按下之后数码管不在闪烁了,但是,我按键按下时蜂鸣器响不知道该放哪儿了”
是这里看不明白。
在线时间126 小时
TA的帖子TA的资源
一粒金砂(中级), 积分 86, 距离下一级还需 114 积分
一粒金砂(中级), 积分 86, 距离下一级还需 114 积分
用了那么多中断,它们之间也是会相互影响的。
在线时间3 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
一粒金砂(初级), 积分 2, 距离下一级还需 3 积分
可以试下赛元的触摸MCU,Q
本帖子中包含更多资源
才可以下载或查看,没有帐号?
在线时间2 小时
TA的帖子TA的资源
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
一粒金砂(初级), 积分 4, 距离下一级还需 1 积分
楼主 你好&&能加个Q好友么 我也遇到了同样问题 能交流一下么 如果可以的话+QQ
论坛测评队员
Powered by
逛了这许久,何不进去瞧瞧?}

我要回帖

更多关于 单片机数码管闪烁程序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信