标题:
8位数码管动态显示的单片机源码
[打印本页]
作者:
wulechun
时间:
2018-4-3 15:17
标题:
8位数码管动态显示的单片机源码
8位数码管动态显示仿真原理图如下(proteus仿真工程文件可到本帖附件中下载)
0.png
(11.89 KB, 下载次数: 57)
下载附件
2018-4-6 03:22 上传
单片机源程序如下:
/* 设计题目: 基于51单片机的数码管动态扫描显示
/* 功能 :让8个数码管显示不同的数字
/* 说明 :每一个数码管扫描时间不要超过5ms
/************************************************/
#include <reg51.h> // 12M 晶振
#define SEG P0 // 定义段码端口
#define SCAN P2 // 定义位扫描端口
#define uchar unsigned char
#define uint unsigned int
///////////////////////////////////////////////////////////
// Name : 段码和位选数据
// In :
// Out :
// Function : 用于段码和位选输出
// Explain : 段码为共阳型,位选时,高电平关闭,低电平选通
///////////////////////////////////////////////////////////
uchar seg[10] = {0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x98};
uchar sel[8] = {0xfe,0xfd,0xfb,0xf7, // 从右向左选择数码管,共8个
0xef,0xdf,0xbf,0x7f}; // 0xfe,表示选择最右一个数码管
///////////////////////////////////////////////////////////
// Name : 延时函数
// In : uint x
// Out :
// Function : 用于延时一定时间
// Explain : 用12M晶振时,大概延时1ms,
///////////////////////////////////////////////////////////
void delay_1ms(uint x) // 用12M晶振时,延时1ms,
{
uint i,j;
for(i=0; i<x; i++)
for(j=0; j<120; j++);
}
///////////////////////////////////////////////////////////
// Name : 主函数
// In :
// Out :
// Function : 实现数码管的动态扫描显示
// Explain :
///////////////////////////////////////////////////////////
void main(void)
{
uchar cnt=0;
while(1) // 无限循环
{
SCAN = ~0xff; // 送数据时,先关闭显示,以避免重影现象
SEG = seg[cnt]; // 送数据
SCAN = ~sel[cnt]; // 送出数据后,选择对应的数码管
delay_1ms(1); // 延时1ms(延时时间不能太长,最好不要超过5ms)
cnt++; // 指向下一个状态
if(cnt == 8) // 判断是否取完所有状态
cnt = 0;
}
}
复制代码
所有资料51hei提供下载:
prj3_SEG7.rar
(42.84 KB, 下载次数: 67)
2018-4-3 15:17 上传
点击文件名下载附件
下载积分: 黑币 -5
作者:
LHD无悔
时间:
2019-6-13 23:11
感谢,值得学习
作者:
一梦尽
时间:
2019-6-17 10:22
感谢,值得学习
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1