7段数码管显示动态字符
2012-09-02 15:23
246 查看
74HC573直通方式做驱动,接共阳数码管
数码管结构原理,共阴和共阳
共阴,共阳段码16进制代码
/*************************
*实验:7段数码管显示动态数据
*参考知识:http://en.wikipedia.org/wiki/Seven-segment_display
*单片机:STC89C52
*编译环境:Keil2
*作者:fslJlang
*改进:可以增加显示的数值和字符,增加动态显示的方式,并轮流播放,优化延时时间使视觉效果最佳等。
*************************/
#include<reg52.h> //头文件
#define dataPort P0 //P0接8位数据端口
#define ctrlPort P1 //P1接8位控制端口
typedef unsigned char uchar;
typedef unsigned int uint;
#define NUM_A 400
#define NUM_B 450
#define NUM_C 9
#define bit_NUM 8
uchar code charArray[] = {0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xa7,0xa1,0x86,0x8e}; // 段码值0,1,2...,E,F选择
uchar code bitArray[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; //共阳common位选择
void delay(uint t); //delay函数声明
/*---------main入口-------*/
main()
{
uchar char_i,dynamic_num;
uint time_j;
char_i = dynamic_num = 0;
while(1)
{
dataPort = charArray[char_i]; //取位码
ctrlPort = bitArray[dynamic_num + char_i]; //取段码,显示字符值
delay(NUM_A); //扫描间隙,利用人眼暂留原理,动态点亮各数码管
char_i++;
time_j++;
if(bit_NUM == char_i) //8个数码管是否完成扫描?如完成,则重新选择第一个数码管
{
char_i = 0;
}
if(NUM_B == time_j) //保持当前字符(数值)显示一段时间后,更新字符,则下一次各数码管的显示值比前一次+1,
//给人感觉好像数值是从左往右在动态流动一样
{
time_j = 0;
dynamic_num++;
if(NUM_C == dynamic_num)
{
dynamic_num = 0;
}
}
}
}
delay(...)
{...}
显示效果:
相关文章推荐
- 数码管动态显示字符
- 7段数码管 显示十六进制字符
- jquery实现隐藏显示层动画效果、仿新浪字符动态输入、tab效果
- 关于X86汇编语言学习的随记-8259.8254.A/D转换.D/A转换。键盘扫描。LED7段数码管显示
- 单片机实验——电子表(数码管动态显示技术)
- 数码管动态显示 --------位选应在段选之前进行
- 两个C/C++的小程序,实现不显示字符的键盘输入和实现动态显示的百分数
- javascript TextArea动态显示剩余字符
- 51单片机入门之五:数码管显示(动态)
- 第六章 数码管的动态显示+计时器的应用
- 51绿板数码管动态显示
- 数码管动态显示
- MSP430学习笔记6-动态数码管的显示
- 51单片机数码管的动态显示
- 【实验】动态显示二位七段数码管
- 基于51单片机的74HC164驱动六位数码管动态显示程序
- 8位数码管动态扫描显示变化数据
- C51单片机学习(三):数码管动态显示和键盘
- jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
- 数码管动态显示