stm32f10 16x16點陣燈實現
單片機源程序如下:
- #include "stm32f10x.h"
- #include"system_stm32f10x.h"
- #include "sys.h"
- #include"usart.h"
- #include"stm32f10x_rcc.h"
- #include "delay.h"
- #include"led.h"
- #include"exti.h"
- #define R_port PAout(8)
- #define D_port PAout(7)
- #define C_port PAout(6)
- #define B_port PAout(5)
- #define A_port PAout(4)
- #define G_port PAout(3)
- #define DI_port PAout(2)
- #define CLK_port PAout(1)
- #define Latch_port PAout(0)
- //#define uint unsigned int
- #define _Nop() _nop_()
- u8 r,p,q=0,x,y,flag,z=0;
- u8 i=0;
- u8 j=0; /*讀取對應的高八位的第幾位數據*/
- u8 k=0; /*讀取對應的第八位的第幾位數據*/
- u8 a[16]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
- u8 b[16]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
- unsigned char tab[8];
- unsigned char DIS[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};//行數據
- /*-----------------------------------------------
- 16x16漢字取模數據
- ------------------------------------------------*/
- unsigned char hztest[][32]= //二維數組,目的是減少運算,可以用最基本的一維數組,每個漢字有32個字節數據
- {
- /*-- 調入了一幅圖像:C:\Users\shifang\Desktop\電池空.bmp --*/
- /*-- 寬度x高度=16x16 --*/
- 0x00,0x00,0xC0,0x03,0xF0,0x0F,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,
- 0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0xF0,0x0F,0x00,0x00,0x00,0x00,
- /*-- 調入了一幅圖像:C:\Users\shifang\Desktop\電池10%.bmp --*/
- /*-- 寬度x高度=16x16 --*/
- 0x00,0x00,0xC0,0x03,0xF0,0x0F,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,
- 0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0xF0,0x0F,0xF0,0x0F,0x00,0x00,0x00,0x00,
- /*-- 調入了一幅圖像:C:\Users\shifang\Desktop\電池20%.bmp --*/
- /*-- 寬度x高度=16x16 --*/
- 0x00,0x00,0xC0,0x03,0xF0,0x0F,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,
- 0x10,0x08,0x10,0x08,0x10,0x08,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0x00,0x00,0x00,0x00,
- /*-- 調入了一幅圖像:C:\Users\shifang\Desktop\電池40%.bmp --*/
- /*-- 寬度x高度=16x16 --*/
- 0x00,0x00,0xC0,0x03,0xF0,0x0F,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,
- 0x10,0x08,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0x00,0x00,0x00,0x00,
- /*-- 調入了一幅圖像:C:\Users\shifang\Desktop\電池60%.bmp --*/
- /*-- 寬度x高度=16x16 --*/
- 0x00,0x00,0xC0,0x03,0xF0,0x0F,0x10,0x08,0x10,0x08,0x10,0x08,0x10,0x08,0xF0,0x0F,
- 0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0x00,0x00,0x00,0x00,
- /*-- 調入了一幅圖像:C:\Users\shifang\Desktop\電池80%.bmp --*/
- /*-- 寬度x高度=16x16 --*/
- 0x00,0x00,0xC0,0x03,0xF0,0x0F,0x10,0x08,0x10,0x08,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,
- 0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0x00,0x00,0x00,0x00,
- /*-- 調入了一幅圖像:C:\Users\shifang\Desktop\電池100%.bmp --*/
- /*-- 寬度x高度=16x16 --*/
- 0x00,0x00,0xC0,0x03,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,
- 0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0xF0,0x0F,0x00,0x00,0x00,0x00,
- };
- /*-----------------------------------------------
- 向595寫入一個字節 單紅色
- ------------------------------------------------*/
- void InputByteR( unsigned char DataR1) //寫一個字節
- {
- unsigned char i;
- for(i=8; i>0; i--)
- {
- R_port = !(DataR1&0x01);
- CLK_port = 0;
- CLK_port = 1;
- DataR1 = DataR1 >> 1;
- }
- }
- /*-----------------------------------------------
- 向595寫入一個字節 單綠色
- ------------------------------------------------*/
- void InputByteG( unsigned char DataG1) //寫一個字節
- {
- unsigned char i;
- for(i=8; i>0; i--)
- {
- G_port = !(DataG1&0x01);
- CLK_port = 0;
- CLK_port = 1;
- DataG1 = DataG1 >> 1;
- }
- }
- /*-----------------------------------------------
- 向595寫入兩個字節 雙色
- ------------------------------------------------*/
- void Input2Byte( unsigned char DataR1,unsigned char DataG1) //寫一個字節
- {
- unsigned char i;
- for(i=8; i>0; i--)
- {
- R_port = !(DataR1&0x01);
- G_port = !(DataG1&0x01);
- CLK_port = 0;
- CLK_port = 1;
- DataR1 = DataR1 >> 1;
- DataG1 = DataG1 >> 1;
- }
- }
-
- int main(void)
- {
- int cnt = 0 ;
- int a = 0 , b = 0 ;
-
- static unsigned char count,j;
- unsigned char i;
- static int num;
- static unsigned char S_Flag=0;
-
- GPIO_InitTypeDef GPIO_InitStructure;
- NVIC_Configuration(); //設置NVIC中斷分組2:2位搶占優先級,2位響應優先級
- uart_init(9600); //串口初始化為9600
- delay_init(); //延時函數初始化
- LED_Init();
- EXTIX_Init();
-
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_GPIOF, ENABLE); //使能PA端口時鐘
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //推挽輸出
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //IO口速度為50MHz
- GPIO_Init(GPIOA, &GPIO_InitStructure); //根據設定參數初始化
- printf("\r\n %d \r\n",SystemCoreClock) ;
-
- while(1){
-
-
- if ( cnt % ( 1000*50 ) == 0 )
- a = 6-b % 7 ;
- cnt++ ;
- b++ ;
-
-
-
- Latch_port=0; //鎖存釋放
-
-
-
- for(j=0;j<1;j++) //取每個漢字的前2個字節,數據傳輸完成后鎖存輸出即可 j表示漢字個數,如果是3個漢字屏就可以修改成3
- {
- if(S_Flag==0){
- Input2Byte(hztest[j+a][i],0);
- Input2Byte(hztest[j+a][i+1],0);
- }
- else if(S_Flag==1)
- {
- Input2Byte(0,hztest[j][i]);
- Input2Byte(0,hztest[j][i+1]);
- }
- else if(S_Flag==2)
- {
- Input2Byte(0,hztest[j+1][i]);
- Input2Byte(0,hztest[j+1][i+1]);
- }
- else if(S_Flag==3)
- {
- Input2Byte(hztest[j+1][i],0);
- Input2Byte(hztest[j+1][i+1],0);
- }
- }
- G_port = 1; /*關屏顯示,原理為使HC138輸出全為1,從而三極管截止,點陣不顯示*/
- R_port = 1;
- switch (count){
- case 0:
- A_port = 0; B_port = 0; C_port = 0; D_port = 0;
- break;
- case 1:
- A_port = 1; B_port = 0; C_port = 0; D_port = 0;
- break;
- case 2:
- A_port = 0; B_port = 1; C_port = 0; D_port = 0;
- break;
- case 3:
- A_port = 1; B_port = 1; C_port = 0; D_port = 0;
- break;
- case 4:
- A_port = 0; B_port = 0; C_port = 1; D_port = 0;
- break;
- case 5:
- A_port = 1; B_port = 0; C_port = 1; D_port = 0;
- break;
- case 6:
- A_port = 0; B_port = 1; C_port = 1; D_port = 0;
- break;
- case 7:
- A_port = 1; B_port = 1; C_port = 1; D_port = 0;
- break;
- case 8:
- A_port = 0; B_port = 0; C_port = 0; D_port = 1;
- break;
- case 9:
- A_port = 1; B_port = 0; C_port = 0; D_port = 1;
- break;
- case 10:
- A_port = 0; B_port = 1; C_port = 0; D_port = 1;
- break;
- case 11:
- A_port = 1; B_port = 1; C_port = 0; D_port = 1;
- break;
- case 12:
- A_port = 0; B_port = 0; C_port = 1; D_port = 1;
- break;
- case 13:
- A_port = 1; B_port = 0; C_port = 1; D_port = 1;
- break;
- case 14:
- A_port = 0; B_port = 1; C_port = 1; D_port = 1;
- break;
- case 15:
- A_port = 1; B_port = 1; C_port = 1; D_port = 1;
- break;
- }
- Latch_port = 1; /*允許HC595數據輸出到Q1-Q8端口*/
- G_port = 0; /*HC138輸出有效,打開顯示*/
- R_port = 0;
- Latch_port = 0; /*鎖定HC595數據輸出*/
-
-
- count++;
- i+=2; //累加調用下一行數據
- if(count==16)
- count=0;
- if(i==32)
- i=0;
- }
-
- }
復制代碼
所有資料51hei提供下載:
stm32f10 16x16點陣燈.rar
(283.1 KB, 下載次數: 65)
2018-7-25 01:29 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|