今天學的不多,內容為:靜態、動態數碼管的控制,模塊化編程和lcd1602調試工具
數碼管的控制
由于內部電路的設計,數碼管每次只能顯示一個位置的一個數字,動態的實現是基于不同位置的閃爍頻率高。
P2_4,P2_3,P2_2控制位置(與led模塊共用接口)
顯示數字,順時針旋轉依次為ABCDEFG DP,0為滅,按順序寫出后由右向左讀出,例如6為 1011 1110(對應ABC...),為7D(0111 1101)
靜態
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Nixie(unsigned char Location,Number)
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];}
void main()
{Nixie(5,9);while(1){}
}
動態
我們可以將delay的時間由高到低觀察,發現確實是閃爍
(但是不進行delay清零,否則上次的會串到當前的,導致亂碼)
#include <REGX52.H>
unsigned char NixieTable[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void Delay(unsigned int xms) //@12.000MHz
{unsigned char i, j;while(xms--){i = 2;j = 239;do{while (--j);} while (--i);}}void Nixie(unsigned char Location,Number)//????,????????ABCDEFG DP,0??,????????????//??6? 1011 1110,?7D
{switch(Location){case 1:P2_4=1;P2_3=1;P2_2=1;break;case 2:P2_4=1;P2_3=1;P2_2=0;break;case 3:P2_4=1;P2_3=0;P2_2=1;break;case 4:P2_4=1;P2_3=0;P2_2=0;break;case 5:P2_4=0;P2_3=1;P2_2=1;break;case 6:P2_4=0;P2_3=1;P2_2=0;break;case 7:P2_4=0;P2_3=0;P2_2=1;break;case 8:P2_4=0;P2_3=0;P2_2=0;break;}P0=NixieTable[Number];Delay(1);//數碼管消影,位選 段選 清零 位選 段選P0=0x00;
}
void main()
{while(1){Nixie(1,1);Nixie(2,2);Nixie(3,3);}
}
模塊化編程
模塊化編程就是將函數單獨生成兩個文件一個.c一個.h,達到和頭文件類似的效果。
#ifndef __DELAY_H__
#define __DELAY_H__
void Delay(unsigned int xms);
#endif
.h文件的固定聲明格式? ? ? ??
這是達成的效果,使代碼更加簡潔,同時也方便在后續的使用。后續再用可以將相應的文件粘貼到對應的文件夾里
lcd1602調試工具
lcd1602主要學習了會使用的函數
#include <REGX52.H>
#include "LCD1602.h"
#include "Delay.h"
int Result=0;
void main()
{LCD_Init();/*LCD_ShowChar(1,1,'A');LCD_ShowString(1,3,"HELLO");LCD_ShowNum(1,9,521,3);LCD_ShowSignedNum(1,13,-66,2);LCD_ShowHexNum(2,1,0xA8,2);LCD_ShowBinNum(2,4,0xAA,8);*/while(1){Result++;Delay(1000);LCD_ShowNum(1,1,Result,3);}
}
今天學習的內容不是很多,主要是數碼管的硬件原理聽了好長時間,雖然還是似懂非懂,但是感覺挺有用的。