说明:为使博文看起来简单,以下程序中没有的函数都在前面已经出现过,如果需要,请自行查阅。
实验现象: 下载程序到实验板,开发板从左到右数码管每隔2s显示1位数字,依次是0-7
程序:
SMG.h
#ifndef _SMG_H
#define _SMG_H
extern uchar SMG_Value; // 存放读取到的数据
void SMG_Circle_Display(); // 8个数码管循环显示8个数字
#endif
SMG.c
#include "All.h"
uchar SMG_Value = 0; // 存放读取到的数据
//共阳数码管 无小数点
uchar code DuanBuffer[17]={
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e,0xff};
// 共阳极数码管位选
uchar code WeiBuffer[8] = {
0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
// 数码管显示缓冲区 // 动态显示数码管
uchar disbuffer[8] = {
0,1,2,3,4,5,6,7
};
共阳数码管 有小数点
//uchar code DuanBuffer[16]={
//0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78, 0x00,0x10,0x08,0x03,0x46,0x21,0x06,0x0e};
/* 数码管位选排列
0x01 0x02 0x04 0x08 0x10 0x20 0x40 0x80
实际排列 0000 0000
P0引脚 0123 4567
*/
/* 数码管 只显示前两位 */
void SMG_Circle_Display()
{
uchar i ;
for(i=0;i<8;i++) // 一个数码管循环显示16个数
{
HC138_Enable_CS(7); // 打开段选
P0 = DuanBuffer[disbuffer[i]] ; // 这个数是几就显示几
HC138_Enable_CS(6); // 打开位选
P0 = WeiBuffer[i]; // 数码管位选
Delay_ms(2000); // 延迟2000ms
}
}
main.c
#include "All.h"
/* 主函数 */
void main()
{
/* 屏蔽蜂鸣器*/
HC138_Enable_CS(5);
P0 = 0x00; // 全是0 ,经过反相器
while(1)
{
SMG_Circle_Display();
}
}
效果:
这里随便截几张图。