📄 display222.c
字号:
/******************************************************************************
实验C示例程序,已运行调试通过,仅提供参考。
实验题目:在数码管上各位显示不同的数字
相关说明:程序依次在数码管上显示0-5这六个字符
******************************************************************************/
#include"at89x52.h"
#define uchar unsigned char
//------------------------显示字符码----------------------------------
// 0 1 2 3 4 5 6 7
const uchar Key_Number[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07
// 8 9 a b c d e f
,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};
//数码管各显示位: 0位 1位 2位 3位 4位
uchar dis_bit[6]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF};
uchar buffer_dis[6]; //显示字符缓冲区
uchar ptr_bit=0x00; //当前显示位指针
long int disdata=0;
uchar counter=0;
void device_ini(void) //初始化系统
{
TL0=0xD8; //置定时器初值0xB1DF
TH0=0xF0;
TMOD=0x01; //设定定时器/计数器0工作方式为1
IE=0x82; //允许全局中断,允许定时器/计数器0溢出中断
TR0=0x01; //启动定时器/计数器0
}
/******************************************************************************
显示缓冲区中的字符码
******************************************************************************/
void display(void)
{
if(ptr_bit<=0x05) //在0-5位循环显示
{
P1=dis_bit[ptr_bit]; //设置当前显示位
P0=buffer_dis[5-ptr_bit]; //在当前位显示显示缓冲区中的字符码
ptr_bit++; //准备在下一位显示
}
else
ptr_bit=0x00; //指针越界则清零
}
//把当前要显示的数送缓冲区
void print(long disdata) //将要输出的数按位分解成单独的数,送到各自对应
{ //最高为6位
buffer_dis[0]=Key_Number[disdata&0x0f]; //分解个位
buffer_dis[1]=Key_Number[(disdata>>4)&0x0f]; //分解十位
buffer_dis[2]=Key_Number[(disdata>>8)&0x0f];
buffer_dis[3]=Key_Number[(disdata>>12)&0x0f];
buffer_dis[4]=Key_Number[(disdata>>16)&0x0f];
buffer_dis[5]=Key_Number[(disdata>>20)&0x0f]; //分解最高位
}
void timer0_over(void) interrupt 1 //定时器/计数器0中断服务程序
{
TL0=0xD8; //置初值0xE0C0 f0d8
TH0=0xF0;
counter++;
if(counter==0xff)
{
disdata++;
print(disdata);
}
display(); //调用显示函数
}
/**********************************主函数*************************************/
void main()
{
device_ini(); //初始化系统
print(0x123456); //送当前要显示的数到缓冲区
while(1)
;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -