资源简介
数码管显示0-99, CESASSCS
/***************************************************************************
标题: 数码管的显示
效果: 显示00-99,动态显示+变化显示
作者: 启程电子
******************************************************************************/
;脚功能定义
SMG_q EQU P3.4 ;定义数码管阳级控制脚,千位
SMG_b EQU P3.5 ;定义数码管阳级控制脚,百位
SMG_s EQU P3.7 ;定义数码管阳级控制脚,十位
SMG_g EQU P3.6 ;定义数码管阳级控制脚,个位
;定义数据RAM空间
LDB EQU 36H ;定义一个变量存放显示值
;数据存放
ORG 0100
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H ;表:共阳数码管 0-9
ORG 0000H
LJMP MAIN
ORG 0200H
MAIN: MOV DPTR,#TABLE
M0
: MOV LDB,#0 ;变量复值0
M1: MOV R7,#50 ;两级R7与R6组成12800次刷新,约1秒,如果要精确时间,可以用到定时器,请看例13
M2: MOV R6,#255
M3: CLR SMG_s ;选择十位数码管
MOV A,LDB ;将变量值除以10,商为十位值,余为个位
MOV B,#10 ;
DIV AB ;相除后获得十位和个位的值存放A和B中
MOVC A,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容
MOV P0,A
LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度
MOV P0,#0FFH ;清除数码管显示,因是共阳型,所以不是0
SETB SMG_s ;关闭十位数码管
CLR SMG_g ;选择个位数码管
MOV A,B ;个位显示
MOVC A,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容
MOV P0,A
LCALL DELAY ;延时,停留一会
MOV P0,#0FFH ;清除数码管显示
SETB SMG_g ;关闭个位数码管
M4: DJNZ R6,M3
DJNZ R7,M2 ;12800次刷新,约1秒
MOV A,LDB
CJNE A,#99,M5 ;如果LDB变量值等于99就回到0开始,因为只有两位数码管,不能显示更多位
LJMP M0
M5: INC LDB
LJMP M1 ;
DELAY: MOV R5,#10 ;此次延时子程序不用很长时间
DJNZ R5,$
RET
END
/***************************************************************************
标题: 数码管的显示
效果: 显示00-99,动态显示+变化显示
作者: 启程电子
******************************************************************************/
;脚功能定义
SMG_q EQU P3.4 ;定义数码管阳级控制脚,千位
SMG_b EQU P3.5 ;定义数码管阳级控制脚,百位
SMG_s EQU P3.7 ;定义数码管阳级控制脚,十位
SMG_g EQU P3.6 ;定义数码管阳级控制脚,个位
;定义数据RAM空间
LDB EQU 36H ;定义一个变量存放显示值
;数据存放
ORG 0100
TABLE: DB 0C0h,0F9H,0A4H,0b0H,99H,92H,82H,0F8H,80H,90H ;表:共阳数码管 0-9
ORG 0000H
LJMP MAIN
ORG 0200H
MAIN: MOV DPTR,#TABLE
M0
: MOV LDB,#0 ;变量复值0
M1: MOV R7,#50 ;两级R7与R6组成12800次刷新,约1秒,如果要精确时间,可以用到定时器,请看例13
M2: MOV R6,#255
M3: CLR SMG_s ;选择十位数码管
MOV A,LDB ;将变量值除以10,商为十位值,余为个位
MOV B,#10 ;
DIV AB ;相除后获得十位和个位的值存放A和B中
MOVC A,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容
MOV P0,A
LCALL DELAY ;延时,停留一会,让人眼感触到它的亮度
MOV P0,#0FFH ;清除数码管显示,因是共阳型,所以不是0
SETB SMG_s ;关闭十位数码管
CLR SMG_g ;选择个位数码管
MOV A,B ;个位显示
MOVC A,@A+DPTR ;查表输出定义好的数码管段值到P0口,显示相应的内容
MOV P0,A
LCALL DELAY ;延时,停留一会
MOV P0,#0FFH ;清除数码管显示
SETB SMG_g ;关闭个位数码管
M4: DJNZ R6,M3
DJNZ R7,M2 ;12800次刷新,约1秒
MOV A,LDB
CJNE A,#99,M5 ;如果LDB变量值等于99就回到0开始,因为只有两位数码管,不能显示更多位
LJMP M0
M5: INC LDB
LJMP M1 ;
DELAY: MOV R5,#10 ;此次延时子程序不用很长时间
DJNZ R5,$
RET
END
代码片段和文件信息
/******************************************************************
/* *
/* 单片机开发系统演示程序 *
/* *
/* *
/******************************************************************/
#include //51芯片管脚定义头文件
#include //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
sbit SDATA_595=P1^5; //串行数据输入 ----接板卡上的SPI
sbit SCLK_595 =P1^6; //移位时钟脉冲 ---接板卡上的SPO
sbit RCK_595 =P1^7; //输出锁存器控制脉冲 ----接板卡上SPK
sbit CS_LED8 =P1^1; //数码管片选 --------接板卡上的CS
sbit CS_1302 =P1^4; //ds1302片选
uchar code table[]={0x3f0x060x5b0x4f0x66
0x6d0x7d0x070x7f0x6f
0x770x7c0x390x5e0x790x71}; //数码管编码(0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F)
uchar dis[8]; //显示缓冲区
void delay(uint );
void display();
/*******************************************************
* *
* 延时函数 *
* *
*******************************************************/
void delay(uint dt)
{
uint i;
uchar bt;
for(i=0;i for(bt=0;bt<200;bt++);
}
/*******************************************************
* *
* 定时中断函数 *
* *
*******************************************************/
void timer0(void) interrupt 1
{
TH0=0XFC;
TL0=0X66;
display();
}
/*******************************************************
* *
* 显示函数 *
* *
*******************************************************/
void display()
{
uchar numci;
for(i=0;i<8;i++)
{
num=dis[i];
CS_LED8=0;
for(c=0;c<8;c++) //写入显示数据
{
SCLK_595=0;
num=num<<1;
SDATA_595=CY;
SCLK_595=1;
SCLK_595=0;
}
num=~(1< for(c=0;c<8;c++) //写入数码管序号
{
SCLK_595=0;
num=num<<1;
SDATA_595=CY;
SCLK_595=1;
SCLK_595=0;
}
RCK_595=0;
_nop_(); //短延时
_nop_();
RCK_595=1;
_nop_();
_nop_();
RCK_595=0; //显示数据输出
delay(1);
CS_LED8=1;
}
}
/*******************************************************
* *
* 主函数 *
* *
*******************************************************/
main(void)
{
uchar k;
TMOD|=0x01;
TH0=0XFC;
TL0=0X66; //定时器初始化
TR0=1;
EA=1;
ET0=1;
//
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4869 2008-07-10 14:08 4.数码管\smg
文件 3314 2013-03-13 21:05 4.数码管\smg.c
文件 785 2008-07-10 14:08 4.数码管\smg.hex
文件 54 2008-07-10 14:08 4.数码管\smg.lnp
文件 7795 2008-07-10 14:08 4.数码管\smg.LST
文件 7680 2008-07-10 14:08 4.数码管\smg.M51
文件 4651 2008-07-10 14:08 4.数码管\smg.OBJ
文件 1064 2008-07-10 14:58 4.数码管\smg.Opt
文件 173 2012-05-20 05:47 4.数码管\smg.plg
文件 2026 2008-05-20 17:44 4.数码管\smg.Uv2
文件 1072 2008-07-10 14:15 4.数码管\smg_Opt.Bak
文件 0 2008-05-20 16:38 4.数码管\smg_Uv2.Bak
文件 5115 2002-04-16 14:32 4.数码管\STARTUP.A51
文件 11665 2008-07-10 14:08 4.数码管\STARTUP.LST
文件 749 2008-07-10 14:08 4.数码管\STARTUP.OBJ
文件 24576 2008-07-10 14:06 4.数码管\数码管实验说明.doc
目录 0 2013-03-13 21:05 4.数码管
----------- --------- ---------- ----- ----
75588 17
相关资源
- CH454键盘与数码管显示程序
- 基于EWB软件的数码管显示控制器
- 单片机电子琴 数码管显示
- 74hc244驱动数码管显示电路及程序
- 畅学ARM多功能实验箱数码管显示源码
- 红外遥控数码管显示.zip
- 数字钟数码管显示时分秒
- 基于FPGA的DS18B20单总线控制+数码管显
- stm32 控制 数码管显示以及LCD显示
- stm32驱动MAX7219控制数码管显示.zip
- Verilog编写6位数码管显示计数,每条语
- 利用proteus完成8255相关要求
- 基于fpga的超声波测距,数码管显示
- 基于FPGA用VHDL语言设计的四位共阴数码
- 基于51单片机的水箱、水塔水位检测系
- 抢答器主要涉及按键防抖和6位数码管
- stm32-DS18B20 数码管显示
- FPGA数字频率计数码管显示
- 51单片机通过DS1302进行时钟显示,并在
- 黑金科技的FPGA 控制DS18B20并用数码管
- FPGA控制超声波测距及数码管显示
- 带温度显示的万年历_数码管显示(
- 基于51单片机的数码管显示时钟电路图
- DS1302 数码管显示 带闹钟可调
- 四位数字频率计数码管显示.zip
- 51程序红外模块检测有红外线后人或动
- 基于VHDL的数字时钟源程序+详细设计报
- 51单片机实现温度检测数码管显示,控
- 74HC573驱动数码管显示程序
- 基于STM32的数码管显示模板
评论
共有 条评论