📄 display2.c
字号:
/****************************************Copyright (c)**************************************************/
/**
;** 西南科技大学计算机学院
;**
;** http://cs.swust.edu.cn
;**
;** 日期: 2004.10.15
;** 功能: 8段数码管显示程序,利用6个数码管来同时显示数据,提示信息,显示原理:
;** 采用轮循扫描的方式,过高的扫描频率会浪费CPU资源,过低的频率会使人肉眼
;** 感到闪烁,一般频率应设置为50HZ为佳。
;** 扩展: 采用扫描频率来调节显示亮度。利用定时器设置频率
;** 本程序作用:数码管扫描显示原理, 扫描时间由慢到快的人的视觉反应
;** 数码管段码:0------F 对应 0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,
;** 0x77,0x7c,0x39,0x5e,0x79,0x71 ,可采用查表实现
;** 硬件连接,连接数码管显示模块中的两组跳线,一组为8位数据线,一组为6位位选线,
;** 默认连接,数据:p00----p07,位选:P10----P15 ,数码管共阴级
;**
;**
;**-------------.c文件
;**------------------------------------------------------------------------------------------------------*/
/**------------------------------------------------------------------------------------------------------*/
#include <AT89X52.H>
const char Discode[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
char displaycolum=0xfe;
unsigned char dislaycount=0;
char DIS[6];
void timer0_init(void);
void Display(void);
void Print(long int disdata);
void PortInit(void);
unsigned char count=0xff;//
char delaycount=0x20;
char ccount=0x20;
/***********************************************************************************
定时器0中断服务函数
作 用: 添加服务函数,由定时器中断统一调用
入口参数: 无
中断向量: 1
***********************************************************************************/
void int_t0(void) interrupt 1
{
Display();
TH0=0Xd8;
}
/***********************************************************************************
主函数
作 用: 程序入口
入口参数: 无
***********************************************************************************/
void main(void)
{
PortInit();
timer0_init();
Print(0x123456);
while(1);
}
/***********************************************************************************
端口初始化函数
作 用: 设置上电后端口某些特殊状态。
入口参数: 无
***********************************************************************************/
void PortInit(void)
{
P3=0x00;
}
/***********************************************************************************
定时器初始化函数
作 用: 初始化定时器,设置定时器中断,定时长度,定时器工作方式
入口参数: 无
***********************************************************************************/
void timer0_init(void)
{
IE|=0X82;
TL0=0X00;
TH0=0X00;
TMOD=01;
TCON|=0X10;
}
/***********************************************************************************
显示扫描函数
作 用: 扫描显示的数码管,通过位选进行选择,调用它的频率表征的显示扫描的频率
入口参数: 无
***********************************************************************************/
void Display(void)
{
P1=displaycolum;
P0=DIS[dislaycount];
dislaycount++;
displaycolum=(displaycolum<<1)|0x01;
if(dislaycount==6)
{
displaycolum=0xfe;
dislaycount=0;
}
}
/***********************************************************************************
数据显示函数
作 用: 设置显示的数据
入口参数: 显示的具体数据,如Print(0x123456);
***********************************************************************************/
void Print(long int disdata)
{
char count;
for(count=0;count<6;count++)
{
DIS[5-count]=Discode[disdata&0x0f];
disdata=disdata>>4;
}
}
/*********************************************************************************************************
Copyright for swust --- cs
********************************************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -