数码管 显示的几种方法
单片机源程序如下:
- #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, 下载次数: 66)
|