數碼管的學習,本項目涉及到數碼管顯示保留不同位小數的floatl類型的小數以及顯示整數的方法。
準確的運用的六位數碼管正確顯示方法。
仿真原理圖如下(proteus仿真工程文件可到本帖附件中下載)
無標題.png (32.55 KB, 下載次數: 80)
下載附件
2018-9-17 09:39 上傳
單片機源程序如下:
- #include <reg51.h>
- #include <intrins.h>
- #include <stdio.h>
- #include <string.h>
- #define u16 unsigned int
- #define u8 unsigned char
- sbit DX=P2^0;
- sbit WX=P2^1;
- void delay_ms(u16 x)//毫秒延時函數
- {u16 i,j;
- for(i=0;i<x;i++)
- for(j=0;j<115;j++);
- }
- u8 code table[]={
- 0x3f,0x06,0x5b,0x4f,
- 0x66,0x6d,0x7d,0x07,
- 0x7f,0x6f,0x77,0x7c,
- 0x39,0x5e,0x79,0x71,0x00}; //共陰數碼管編碼
- void print_float_LED2(char str[])
- {
- u8 temp;
- int i,j;
- //char str[9] = "11-15-30";
- /*switch(x)
- {
- case 1:sprintf(str,"%.1f",n);break;
- case 2:sprintf(str,"%.2f",n);break;
- case 3:sprintf(str,"%.3f",n);break;
- case 4:sprintf(str,"%.4f",n);break;
- case 5:sprintf(str,"%.5f",n);break;
- } */
- for(j=0;j<95;j++)
- {
- i=strlen(str)-1; //從最低位開始輸出
- temp=0x7f;
- while(i>=0)
- {
- P0=0XFF; /*消除P0的值*/
- WX=1; /*位選輸入有效*/
- P0=temp; /*輸出位選碼*/
- WX=0; /*位選鎖存*/
- P0=0; /*消除P0的值*/
- DX=1; /*段選輸入有效*/
- if(str[i]=='-') { P0=0x40;} /*如果為-,則直接顯示-*/
- else P0=table[str[i]-'0']; /*否則,輸出不帶小數點的段碼*/
- DX=0; /*段碼鎖存*/
- temp=_cror_(temp,1);
- i--;
- delay_ms(1);
- }
- }
- }
- void main()
- {
- char str[8] = "23-59-59";
- print_float_LED2(str);
- while(1)
- {
- str[7] = str[7]+1;
- if(str[7]=='9'+1)
- {
- str[7]='0';
- str[6] = str[6]+1;
- }
- if(str[6]=='6'){
- str[6]='0';
- str[4] = str[4]+1;
- }
- if(str[4]=='9'+1){
- str[4]='0';
- str[3] = str[3]+1;
- }
- if(str[3]=='6')
- {
- str[3]='0';
- str[1] = str[1]+1;
- }
- if(str[0]!='2' && str[1]=='5')
- {
- str[1]='0';
- str[0] = str[0]+1;
- }
-
- if(str[0]=='2' && str[1]=='4')
- {
- str[0] = '0';
- str[1] = '0';
- }
- print_float_LED2(str); //Str[7]的值更新后,再次輸出函數
-
- }
- }
復制代碼
所有資料51hei提供下載:
數碼管學習.7z
(37.53 KB, 下載次數: 22)
2018-9-17 09:39 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|