玩了很久的動態掃描,有些感觸,對于單一的顯示而言,這和方法為首選。然而如果程序功能較多,占用資源較大,勢必造成顯示出現閃爍,不友好。這時候需要考慮用靜態顯示或液晶代替。這里給出一個簡單的靜態顯示方法,供參考。
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
|