📄 display.c
字号:
/*****************************************************
激情创造,精彩无限-------欢迎进入单片机的世界
*****************************************************/
/*****************************************************
程序说明:本程序是总线上扩展I/O口,完成动态扫描显示程序
硬件连接:总线连接方式,四联共阳数码管段码端573地址为
0xd000,位选端573地址为0xc000。
程序版本:
作者:ZJ
编写时间:2007年12月5日
修改记录:
备注:
*****************************************************/
/*包含头文件*/
#include <reg52.h>
#include <absacc.h>
/*定义数码管段码和位选码*/
code unsigned char LedCode[] = {0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};
code unsigned char Posit[] = {0x08,0x04,0x02,0x01};
unsigned char DisBuf[4]; //定义显存空间
unsigned char sts,loopnum = 4;
/**********************************************
函数名称:Delay()
函数功能:实现一短暂的延时,时间长短由入口参数决定
入口参数:unsigned int
出口参数:void
备注:
**********************************************/
void Delay (unsigned int Dat)
{
unsigned int i;
for(i=0;i<Dat;i++);
}
/**********************************************
函数名称:Disbufchange()
函数功能:实现移位显存的功能,将入口参数送入显存最后一位,其余的显存内容依次左移一位
入口参数:unsigned char
出口参数:void
备注:
**********************************************/
void Disbufchange (unsigned char Da)
{
DisBuf[0] = DisBuf[1];
DisBuf[1] = DisBuf[2];
DisBuf[2] = DisBuf[3];
DisBuf[3] = Da;
}
/*********************************************
函数名称:Display()
函数功能:显示显存中的四个数据
入口参数:void
出口参数:void
备注:
*********************************************/
void Display (void)
{
unsigned char n;
for (n=0;n<4;n++) //显示4个数据
{
XBYTE[0xd000] = LedCode[DisBuf[n]]; //将显存中的数据送入数码管段码端
XBYTE[0xc000] = Posit[n]; //将对应该显存的数码管点亮
Delay(200); //显示延时
XBYTE[0xc000] = 0x00; //消隐
}
}
/*********************************************
函数名称:main()
函数功能:
入口参数:void
出口参数:void
备注:
*********************************************/
void main (void)
{
unsigned char i;
TMOD = (TMOD & 0x0f) | 0x10; //设置定时/计数器T1工作于方式1
TL1 = (-50000); //设定定时/计数器初值
TH1 = (-50000) >> 8; //定时50ms
TR1 = 1; //启动定时器
ET1 = 1; //开启定时器T1中断
EA = 1; //开启总的中断
for (i=1;i<5;i++) //预置数1234入显存
{
Disbufchange(i);
}
while(1)
{
Display(); //循环显示
}
}
/*********************************************
函数名称:定时/计数器T1中断服务程序
函数功能:实现每一秒移位一次
入口参数:void
出口参数:void
备注:
*********************************************/
void T1_int (void) interrupt 3
{
TL1 = (-50000); //重新赋初值
TH1 = (-50000) >> 8;
if (++sts >= 20) //判断一秒时间是否到达
{
if (++loopnum >= 10) //判断移位数据是否超过10
loopnum = 0;
Disbufchange(loopnum); //移位显存空间里的内容
sts = 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -