數碼管 顯示的幾種方法
單片機源程序如下:
- #include "delay.h"
- #include "sys.h"
- #include "usart.h"
- #include "smg.h"
- #include <stdlib.h>
-
- u8 ge=0,shi=0,bai=0;
- u8 rlen1=0;
- int i=0,j=0,Num=0;
- float num=0;
- char S[100]={0};
-
- u8 smg[16]={ 0xC0, 0xF9, 0xA4, 0xB0,
- 0x99, 0x92, 0x82, 0xF8,
- 0x80, 0x90, 0x88, 0x83,
- 0xC6, 0xA1, 0x86, 0x8E};
-
- int main(void)
- {
- delay_init();
- NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- uart_init(115200);
- SMG_Init();
- printf("SMG test!\r\n");
- while(1) //USART1接收到[0,100)之間的數據通過數碼管顯示出來
- {
- if(USART_RX_STA&0x8000)//接收未完成
- {
- j=0;
- rlen1=USART_RX_STA&0X3FFF; //得到本次接收到的數據長度
- USART_RX_BUF[rlen1]=0;
- USART_RX_STA=0;
- printf("rlen1=%d\r\n",rlen1);
- printf("%s\r\n",USART_RX_BUF);
- sprintf(S,"%s",USART_RX_BUF);//接收到的字節數
- num=atof(S);
- printf("num=%f\r\n",num);
- if(0<=num&&num<10) //0~10
- {
- printf("數值在[0,10)區間\r\n");
- Num=num*100;
- bai=Num/100;
- shi=Num%100/10;
- ge=Num%10;
- GPIO_Write(GPIOC, (u16)smg[bai]-0x80 );
- delay_ms(1000);
- GPIO_Write(GPIOC, (u16)smg[shi] );
- delay_ms(1000);
- GPIO_Write(GPIOC, (u16)smg[ge] );
- delay_ms(1000);
- }
- else if(10<=num&&num<100) //10~100
- {
- printf("數值在[10,100)區間\r\n");
- Num=num*10;
- bai=Num/100;
- shi=Num%100/10;
- ge=Num%10;
- GPIO_Write(GPIOC, (u16)smg[bai] );
- delay_ms(1000);
- GPIO_Write(GPIOC, (u16)smg[shi]-0x80 );
- delay_ms(1000);
- GPIO_Write(GPIOC, (u16)smg[ge] );
- delay_ms(1000);
- }
- else//超出范圍
- {
- printf("數值超出[0,100)區間\r\n");
- for(i=0;i<3;i++)
- {
- GPIO_Write(GPIOC, (u16)0x00 );
- delay_ms(500);
- GPIO_Write(GPIOC, (u16)0xff );
- delay_ms(500);
- }
- }
- }
- j++;delay_ms (10);
- if(j>=300)//3秒沒數據
- {
- GPIO_Write(GPIOC,~(u16)0x01);
- delay_ms(300);
- GPIO_Write(GPIOC,~(u16)0x40);
- delay_ms(300);
- GPIO_Write(GPIOC,~(u16)0x08);
- delay_ms(300);
- }
- }
- }
復制代碼
所有資料51hei提供下載:
數碼管.7z
(212.25 KB, 下載次數: 68)
2019-3-5 10:34 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|