此程序已经通过测试,电路连接是:一个2位的共阴数码管,位选是P3.6,P3.7口,段选是P0口,还有如下3个按键
sbit buzz = P2^2;
sbit clear = P2^0;
sbit start = P2^1;
分别是喇叭,清除和开始 与gnd相连即可.
#include < reg51.h >
#include < intrins.h >
const unsigned char LED7Code[]={
0xC0, // 0
0xF9, // 1
0xA4, // 2
0xB0, // 3
0x99, // 4
0x92, // 5
0x82, // 6
0xF8, // 7
0x80, // 8
0x90, // 9
0x88, // A
0x83, // B
0xC6, // C
0xA1, // D
0x86, // E
0x8E // F
};
sbit buzz = P2^2;
sbit clear = P2^0;
sbit start = P2^1;
unsigned char count = 0;
unsigned char timer1s_flag;
unsigned char hw,lw;
unsigned char flag;
unsigned char clear_flag;
unsigned char start_flag;
//函数申明
void key_scna(void);
/*********************************************************/
void main()
{
TMOD=0x01 ;
TH0=0xed ;
TL0=0xff ;
EA=1;
ET0=1;
TR0=1 ;
while(1)
{
if(timer1s_flag>=200){
timer1s_flag = 0;
if((count>0)&&(count<=40)){
//count--;
hw=count/10;
lw=count%10;
P0=0XFF;
buzz=0;
}
else if(count==0){
hw=count/10;
lw=count%10;
count=42;
P0=0X00;
buzz=1;
}
count--;
}//500ms
//key_scan();
}
}
/*********************************************************/
// 定时器0中断服务程序.
/*********************************************************/
void timer0() interrupt 1 using 2
{
TH0=0xee ;
TL0=0x04 ;
timer1s_flag++;
if(flag==0){
P3=0X40;
P1=LED7Code[hw];
flag = 1;
}
else{
P3=0X80;
P1=LED7Code[lw];
flag = 0;
}
}
/*********************************************************/
//按键扫描程序.
/*********************************************************/
void key_scna(void)
{
;
}
关键字:89C51 单片机 数码管 动态显示
引用地址:
89C51单片机40s倒记时数码管动态显示
推荐阅读最新更新时间:2024-03-16 14:03
ATmega32单片机汇编程序
本人初学每一款CPU,首先都是要研究一下相应的汇编指令,感觉这样能够很快的体验到该CPU的硬件原理,对后续的学习很有帮助.许多人认为不然,感觉汇编繁琐,难用。其实这样不会对单片机内部有深入的了解,会一些基本的汇编在单步调试中很有用,还有调度的编写,操作系统的移植等。 下面是个led闪烁的汇编程序,注释用C写的,一目了然 ***************************************************************** //CPU:mega32 //编译器:iar #include ioavr.h NAME main PUBLIC main ORG
[单片机]
51单片机--时钟芯片ds1302
1.ds1302的性能指标 1)可以计算2100年之前的秒、分、时、日、星期、月、年,并且可以调整闰年。 2)内部有31个字节静态RAM,供用户访问 3)串行数据传送方式(SPI3线接口) 4)工作电压:2.0~5.5v 5) 工作电流:2v时,小于300nA(功耗低) 6)时钟或RAM数据的读写,有两种传送方式:单字节传送、多字节传送 7)主电源和负电源双电源供电(备份电源可以用电池或大电容实现) 2.SPI 1)spi的中文意思是“串行外围接口” 2)spi的应用场景:EEPROM,FLASH,实时时钟,AD转换器,数字信号处理器,数字信号解码器 3)spi接口是在CPU和外围低速器件之间进行同步串行数据传输。在主器件的移
[单片机]
51单片机学习之陆 —— 1.2 第一个c51程序(点亮流水灯)
由于学校的板子跟我买的板子有些差异,为了大家的阅读,以后的所有程序编写烧录都以老师发的板子为主。 1 事先准备 a 驱动安装,注意群中已经发了,吧板子的驱动装好哦。 b 烧写软件(烧录器) stc - isp (这里说明下,板子上的芯片是stc的,你还能看到它的型号stc89c52RC,用stc的烧写软件就可以了) 提问:什么是烧写软件? 答:就是把你写好代码(C或者是汇编)专程的 机器语言 通过一定的方式下载到单片机中。称为烧写。(就先这样简单理解吧) c 编写软件 keil uVision 4 (我仅用它编译生成hex 文件) notpad++ (我用它写c51的代码,然
[单片机]
PIC16位单片机——彻底弄懂时钟
一直以来写程序都是看参考资料和书,这次的16位单片劫dsPIC33EP32GP502没有一点资料。因此趁机也好好深入学习一下!首先看振荡器的选择吧。 首先看一下时钟框图: 我们使用的是外部晶振,所以配置为HS,FCY是CPU时钟,FP是外设时钟,FCY=FP(除打盹模式外)。FCY=Fosc/2。也就是cpu时钟是晶振频率的1/2。下面还有分频。DOZE 2:0 :011 = FCY 被 8 分频 (默认)处理器时钟分频比选择位。 因此实际的FCY=0.5MHz(使用8M的外部晶振,并八分频8/2/8=0.5MHz)。 看一下振荡器选择配置位的说明: 这里我们需要看的是FOSCSEL配置位 第二列是寄存器
[单片机]
单片机与TA8435的步进电机细分控制
1 步进电机 步进电动机是纯粹的数字控制电动机,它将电脉冲信号转变为角位移,即给一个脉冲,步进电机就转一个角度,因此非常合适单片机控制,在非超载的情况下,电机的转速、停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,电机则转过一个步距角,同时步进电机只有周期性的无累积误差,精度高。 步进电动机有如下特点: 1)步进电动机的角位移与输入脉冲数严格成正比。因此,当它转一圈后,没有累计误差,具有良好的跟随性。 2)由步进电动机与驱动电路组成的开环数控系统,既简单、廉价,又非常可靠,同时,它也可以与角度反馈环节组成高性能的闭环数控系统。 3)步进电动机的动态响应快,易于启停、正反转及变速。 4)速度可在相当宽的范
[工业控制]
单片机输出矩阵波实验
这个程序的本意是输出一个矩阵波,但是如果用单片机实验板来运行的话就会发现似乎P1^1(即为第二个led管一直在发光),其实并不是程序有问题使得它一直在亮,而使通段的频率对人眼睛来说太快了,根据视觉暂留,所以会觉得led一直在亮。我开始也是有此怀疑的,可以在程序里面修改使得通段的频率变低,就可以看出来其实是一直在工作的。在注释符号后面的程序就是更改后的; #include reg52.h #define uint unsigned int #define uchar unsigned char sbit D1=P1^1; //uint i=0; void main() { TMOD=0x01; TH0=(65536-
[单片机]
单片机延时程序图解分析
我们已经知道,程序中的符号R7、R6是代表了一个个的RAM单元,是用来放一些数据的,下面我们再来看一下其它符号的含义。 DELAY: MOV R7,#250 ;(6) D1: MOV R6,#250 ;(7) D2: DJNZ R6,D2 ;(8) DJNZ R7,D1 ;(9) RET ;(10) 〈单片机延时程序〉 MOV:这是一条指令,意思是传递数据。说到传递,我们都很清楚,传东西要从一本人的手上传到另一本人的手上,也就是说要有一个接受者,一个传递者和一样东西。从指令MOV R7,#250中来分析,R7是一个接受者,250是被传递的数,传递者在这
[单片机]