標題:
單片機數(shù)碼管的靜態(tài)顯示程序(源代碼+Proteus)
[打印本頁]
作者:
brew9
時間:
2020-2-28 09:55
標題:
單片機數(shù)碼管的靜態(tài)顯示程序(源代碼+Proteus)
玩了很久的動態(tài)掃描,有些感觸,對于單一的顯示而言,這和方法為首選。然而如果程序功能較多,占用資源較大,勢必造成顯示出現(xiàn)閃爍,不友好。這時候需要考慮用靜態(tài)顯示或液晶代替。這里給出一個簡單的靜態(tài)顯示方法,供參考。
2020-02-28_095023.png
(101.82 KB, 下載次數(shù): 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;
//共陰極數(shù)碼管0-9,如果某位后面是小數(shù)點,則該位編碼 | 0x80,即可加上小數(shù)點
u8 code seg_tab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x40};
//定義用于暫存數(shù)字的數(shù)組
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顯示函數(shù)
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下載地址:
數(shù)碼管靜態(tài)顯示.rar
(79.91 KB, 下載次數(shù): 15)
2020-2-28 09:55 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1