标题:
单片机数码管的静态显示程序(源代码+Proteus)
[打印本页]
作者:
brew9
时间:
2020-2-28 09:55
标题:
单片机数码管的静态显示程序(源代码+Proteus)
玩了很久的动态扫描,有些感触,对于单一的显示而言,这和方法为首选。然而如果程序功能较多,占用资源较大,势必造成显示出现闪烁,不友好。这时候需要考虑用静态显示或液晶代替。这里给出一个简单的静态显示方法,供参考。
2020-02-28_095023.png
(101.82 KB, 下载次数: 40)
下载附件
2020-2-28 09:49 上传
单片机源程序如下:
#include<reg52.h>
#include<intrins.h>
typedef unsigned int u16;
typedef unsigned char u8;
sbit shcp = P2^0;
sbit ds = P2^1;
sbit stcp = P2^2;
sbit start_key = P3^0;
sbit record_key = P3^1;
//共阴极数码管0-9,如果某位后面是小数点,则该位编码 | 0x80,即可加上小数点
u8 code seg_tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
//定义用于暂存数字的数组
u8 num_code[8];
u16 num = 135,tmp;
u8 i,j;
void delay(u16 num)
{
u16 x,y;
for(x=num; x>0; x--)for(y=113; y>0; y--){}
}
void int2code(u16 inum)
{
u8 i=0, n;
u16 tmp = inum;
for(i=0; i<8; i++)
{
if(tmp>0)
{
n = tmp % 10;
tmp = (tmp-n) / 10;
num_code[7-i] = seg_tab[n];
}
}
}
//LED显示函数
void display()
{
u8 i,j,a;
for(j=0;j<3;j++)
{
a = num_code[7-j];
for(i=0;i<8;i++)
{
ds=(a<<i)&0x80;
shcp=0;
_nop_();
_nop_();
shcp=1;
}
}
stcp=0;
_nop_();
_nop_();
stcp=1;
}
void main(void)
{
while(1)
{
if(num!=tmp)
{
int2code(num);
display();
tmp = num;
}
if (start_key == 0)
{
delay(10);
if (start_key == 0)
{
num++;
}
while(!start_key);
}
if (record_key == 0)
{
delay(10);
if (record_key == 0)
{
num--;
}
while(!record_key);
}
}
}
复制代码
全部资料51hei下载地址:
数码管静态显示.rar
(79.91 KB, 下载次数: 15)
2020-2-28 09:55 上传
点击文件名下载附件
下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1