2.数码管动态扫描 随意显示9999以内的数
2014-11-02 07:56
330 查看
/*
***********************************************************************************************
* Cool51
* 51开发板例程
*
*
* 文件名称:“main.c”
* 摘 要:数码管扫描显示程序,随意显示一个9999以内数据大小
* 作 者:Rays_ele
*
* 当前版本:1.0
* 完成日期:2011/04/27
* 版权所有:Rays - Copyright (C) 2011
*
***********************************************************************************************
*/
/*包含必要的头文件*/
#include<reg52.h>//开发51单片机必须包含51单片机的头文件,该文件定义了51单片机内部寄存器的地址
/*常用宏定义*/
#define uchar unsigned char
#define uint unsigned int
/*程序接口定义*/
//数码管的段码在原理图上已经和P0口相接,即P0.0对应数码管的a段,P0.1对于b段,依此类推,简单表示如下
#define LED P1
//LED_a-------P0.0
//LED_b-------P0.1
//LED_c-------P0.2
//LED_d-------P0.3
//LED_e-------P0.4
//LED_f-------P0.5
//LED_g-------P0.6
//LED_s-------P0.7
//下面是数码管的位定义,也就是数码管的公共端,具体电路讲解见Cool51原理图,该引脚为低电平即选通该位数码管
sbit LED_1=P2^0;//LED_1-------P2.0
sbit LED_2=P2^1;//LED_2-------P2.1
sbit LED_3=P2^2;//LED_3-------P2.2
sbit LED_4=P2^3;//LED_4-------P2.3
/*全局变量定义部分*/
unsigned char code LED_Code[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};//共阳码
// 0 1 2 3 4 5 6 7 8 9 灭
/*
+---------------------------------------------------------------------------------------+
|函数名称: Delay_ms |
|---------------------------------------------------------------------------------------|
|函数原型: void Delay_ms(uint ms) |
|函数功能: 普通延时函数 |
|入口参数: 延时时间,单位毫秒 |
+---------------------------------------------------------------------------------------+
*/
void Delay_ms(uint ms)
{
uchar t;
while(ms--)
{
for(t = 0; t < 120; t++);
}
}
/*
+---------------------------------------------------------------------------------------+
|函数名称: ShuMaGuan |
|---------------------------------------------------------------------------------------|
|函数原型: void ShuMaGuan(uint dat) |
|函数功能: 数码管扫描显示程序,随意显示一个9999以内数据大小 |
|入口参数: 要显示的0000-9999之间的数据,数据是多少,就显示多少 |
+---------------------------------------------------------------------------------------+
*/
void ShuMaGuan(uint dat)
{
LED=LED_Code[dat/1000];//将dat的千位取出来,用千位数来索引LED_Code的对应段码,再将段码送到对应段码口上
LED_1=0; //段码送出去后,再选通千位数码管的公共端,此时对应千位数码管会显示
Delay_ms(5); //将显示延时一段时间,视觉暂留
LED_1=1;
LED=LED_Code[dat%1000/100];
LED_2=0;
Delay_ms(5);
LED_2=1;
LED=LED_Code[dat%100/10];
LED_3=0;
Delay_ms(5);
LED_3=1;
LED=LED_Code[dat%10];
LED_4=0;
Delay_ms(5);
LED_4=1;
}
/*
+---------------------------------------------------------------------------------------+
|函数名称: main |
|---------------------------------------------------------------------------------------|
|函数原型: void main(void) |
|函数功能: 数码管扫描显示程序,随意显示一个9999以内数据大小 |
|入口参数: 无 |
+---------------------------------------------------------------------------------------+
*/
void main(void)
{
while(1)
{
ShuMaGuan(5674);
}
}
***********************************************************************************************
* Cool51
* 51开发板例程
*
*
* 文件名称:“main.c”
* 摘 要:数码管扫描显示程序,随意显示一个9999以内数据大小
* 作 者:Rays_ele
*
* 当前版本:1.0
* 完成日期:2011/04/27
* 版权所有:Rays - Copyright (C) 2011
*
***********************************************************************************************
*/
/*包含必要的头文件*/
#include<reg52.h>//开发51单片机必须包含51单片机的头文件,该文件定义了51单片机内部寄存器的地址
/*常用宏定义*/
#define uchar unsigned char
#define uint unsigned int
/*程序接口定义*/
//数码管的段码在原理图上已经和P0口相接,即P0.0对应数码管的a段,P0.1对于b段,依此类推,简单表示如下
#define LED P1
//LED_a-------P0.0
//LED_b-------P0.1
//LED_c-------P0.2
//LED_d-------P0.3
//LED_e-------P0.4
//LED_f-------P0.5
//LED_g-------P0.6
//LED_s-------P0.7
//下面是数码管的位定义,也就是数码管的公共端,具体电路讲解见Cool51原理图,该引脚为低电平即选通该位数码管
sbit LED_1=P2^0;//LED_1-------P2.0
sbit LED_2=P2^1;//LED_2-------P2.1
sbit LED_3=P2^2;//LED_3-------P2.2
sbit LED_4=P2^3;//LED_4-------P2.3
/*全局变量定义部分*/
unsigned char code LED_Code[12]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF,0xBF};//共阳码
// 0 1 2 3 4 5 6 7 8 9 灭
/*
+---------------------------------------------------------------------------------------+
|函数名称: Delay_ms |
|---------------------------------------------------------------------------------------|
|函数原型: void Delay_ms(uint ms) |
|函数功能: 普通延时函数 |
|入口参数: 延时时间,单位毫秒 |
+---------------------------------------------------------------------------------------+
*/
void Delay_ms(uint ms)
{
uchar t;
while(ms--)
{
for(t = 0; t < 120; t++);
}
}
/*
+---------------------------------------------------------------------------------------+
|函数名称: ShuMaGuan |
|---------------------------------------------------------------------------------------|
|函数原型: void ShuMaGuan(uint dat) |
|函数功能: 数码管扫描显示程序,随意显示一个9999以内数据大小 |
|入口参数: 要显示的0000-9999之间的数据,数据是多少,就显示多少 |
+---------------------------------------------------------------------------------------+
*/
void ShuMaGuan(uint dat)
{
LED=LED_Code[dat/1000];//将dat的千位取出来,用千位数来索引LED_Code的对应段码,再将段码送到对应段码口上
LED_1=0; //段码送出去后,再选通千位数码管的公共端,此时对应千位数码管会显示
Delay_ms(5); //将显示延时一段时间,视觉暂留
LED_1=1;
LED=LED_Code[dat%1000/100];
LED_2=0;
Delay_ms(5);
LED_2=1;
LED=LED_Code[dat%100/10];
LED_3=0;
Delay_ms(5);
LED_3=1;
LED=LED_Code[dat%10];
LED_4=0;
Delay_ms(5);
LED_4=1;
}
/*
+---------------------------------------------------------------------------------------+
|函数名称: main |
|---------------------------------------------------------------------------------------|
|函数原型: void main(void) |
|函数功能: 数码管扫描显示程序,随意显示一个9999以内数据大小 |
|入口参数: 无 |
+---------------------------------------------------------------------------------------+
*/
void main(void)
{
while(1)
{
ShuMaGuan(5674);
}
}
相关文章推荐
- 3.数码管动态扫描 随意显示9999以内的数(使用定时器)
- lesson4 数码管动态扫描显示
- 关于6位数码管动态扫描显示程序的一些问题
- 8位数码管动态扫描显示变化数据
- 8位数码管动态扫描显示
- proteus仿真之8位数码管动态扫描显示试验
- 利用动态扫描和定时器1在数码管上显示出从765432开始以1/10秒的速度往下递减 直至765398并保持此数,与此同时利用定时器0以500MS速度进行流水灯从上至下移动 ,当数码管上数减到停止时,实验板上流水灯出停止然后全部开始闪烁,3秒后(用 T0定时)流水灯全部关闭,数码管上显示出“HELLO”,到此保持住
- 数码管动态扫描显示方式
- 使用Proteus做数码管动态扫描显示时数码管是出现乱码甚至不显示的原因
- 数码管动态扫描扩展显示
- 51单片机开发系列三_数码管动态扫描显示
- 数码管动态扫描显示01234567
- FPGA学习笔记二(数码管动态显示)
- 数码管显示矩阵键盘扫描程序
- verilog之计数器0~9999——数码管显示
- 【实验】动态显示二位七段数码管
- 单片机数码管动态显示
- 51单片机使用定时器进行数码管动态扫描程序
- 定时器控制数码管扫描显示
- 数码管动态显示 --------位选应在段选之前进行