一.动态数码管显示
动态清零,数字消影
#include <REGX52.H>
unsigned char NixieTable[]={
0x3F,0x06,0x5B,0x4F,
0x66,0x6D,0x7D,0x07,
0x7F,0x6F,0x77,0x7C,
0x39,0x5E,0x79,0x71, 0x00};
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
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];
Delay(1); // 消影
P0=0x00;
}
void main()
{
// P24=1; //控制一个数码管
// P23=0;
// P22=1;
// P0=0x7D; //6号
while(1)
{
Nixie(1,4);
Nixie(2,3);
Nixie(3,2);
}
}
二.模块化编程
模块化编程图
注意事项
C预编译
Delay.c
void Delay(unsigned int xms) //@12.000MHz
{
unsigned char i, j;
while(xms)
{
i = 2;
j = 239;
do
{
while (--j);
} while (--i);
xms--;
}
}
Nixie.c
#include <STC89C5xRC.H>
#include "Delay.h"
unsigned char NixieTable[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71, 0x00};
void Nixie(unsigned char Location,Number)
{
switch(Location)
{
case 1:
P24=1;P23=1;P22=1;break;
case 2:
P24=1;P23=1;P22=0;break;
case 3:
P24=1;P23=0;P22=1;break;
case 4:
P24=1;P23=0;P22=0;break;
case 5:
P24=0;P23=1;P22=1;break;
case 6:
P24=0;P23=1;P22=0;break;
case 7:
P24=0;P23=0;P22=1;break;
case 8:
P24=0;P23=0;P22=0;break;
}
P0=NixieTable[Number];
Delay(1); // 消影
P0=0x00;
}
三.LCD1602调试工具
主函数
#include <REGX52.H>
void main()
{
LCD_Init();
LCD_ShowChar(1,1,'B');
LCD_ShowString(1,3,"Hello");
LCD_ShowNum(1,9,123,3);
LCD_ShowSignedNum(1,13,-66,2);
LCD_ShowHexNum(2,1,0xA8,2);
LCD_ShowBinNum(2,4,0xAA,8);
LCD_ShowChar(2,13,'A');
while(1)
{
}
}