数码管

/******************************************************************************
此程序是依据吴坚鸿程序框架,在普中51 A2单片机开发板上的程序练习
程序目标:数码管显示
*******************************************************************************/
#include<REG51.H>
#define Main_Fosc 12000000L //默认系统时钟12Mhz
#define T1MS (65536-Main_Fosc/12/1000) //12分频下1ms定时器的装载值,n=t/T=t/(12/f)=0.001*f/12=f/12/1000
#define Scan_Time 1
unsigned char Seg_ScanFlag=0;
unsigned char Seg_ScanCNT;
sbit LSA=P2^2;
sbit LSB=P2^3;
sbit LSC=P2^4;
void Sys_Init(); //系统初始化
void Delay_Long(); //长延时,等待系统稳定
void Perpherial_Init(); //端口初始化
unsigned char code Seg[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
void Seg_Display();
void main()
{
Sys_Init();
Delay_Long();
Perpherial_Init();
while (1)
{
;
}
}
void Sys_Init()
{
TMOD=0X01;
TL0=T1MS;
TH0=T1MS>>8;
}
void Delay_Long()
{
unsigned char i,j;
for ( i = 0; i < 220; i++)
{
for(j=0;j<220;j++)
{
;
}
}
}
void Perpherial_Init()
{
TR0=1;
ET0=1;
EA=1;
}
void Seg_Display()
{
static unsigned char Seg_ScanStep=0;
if(0==Seg_ScanCNT)
{
P0=0X00;//消影
switch (Seg_ScanStep)
{
case(0):
LSA=1;LSB=1;LSC=1; break;//显示第0位
case(1):
LSA=0;LSB=1;LSC=1; break;//显示第1位
case(2):
LSA=1;LSB=0;LSC=1; break;//显示第2位
case(3):
LSA=0;LSB=0;LSC=1; break;//显示第3位
case(4):
LSA=1;LSB=1;LSC=0; break;//显示第4位
case(5):
LSA=0;LSB=1;LSC=0; break;//显示第5位
case(6):
LSA=1;LSB=0;LSC=0; break;//显示第6位
case(7):
LSA=0;LSB=0;LSC=0; break;//显示第7位
}
P0=Seg[Seg_ScanStep];
Seg_ScanStep++;
if (Seg_ScanStep>7)
{
Seg_ScanStep=0;
}
Seg_ScanFlag=0;
Seg_ScanCNT=Scan_Time;
Seg_ScanFlag=1;
}
}
void Timer0_ISR() interrupt 1
{
Seg_Display();
if ((1==Seg_ScanFlag)&&(Seg_ScanCNT>0))
{
Seg_ScanCNT--;
}
TL0=T1MS;
TH0=T1MS>>8;
}
posted @   硬软  阅读(39)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示