案例要求:
用1位数码管实现1s显示一个数,先从0-9,然后从A到F。(数码管为共阳极数码管)
案例分析:
首先用一个数组将上述字形码存起来,因为需要1s显示一个数,所以还需用定时器写一个定时函数,然后依次循环显示这16个数字就可以了。
案例代码:
#include <reg51.h> // 引入头文件
unsigned char num_code[] = {0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,0x8e};// 数码管显示0~9及A-F的编码表(共阳极数码管字形码)
unsigned int j;
void time1s()
{
unsigned int i;
for(i=0;i<20;i++) //每次定时50ms,循环20次便是1s
{
TH1=(65536-50000)/256; //定时器初值高8位
TL1=(65536-50000)%256; //定时器初值低8位
TR1=1; //开启T1
while(!TF1); //查询T1是否溢出
TF1=0; //T1溢出后将标志位TF1清零
}
}
void main()
{
TMOD=0x10; //设置工作方式为T1工作方式1
while(1)
{
for(j=0;j<16;j++)
{
P0=num_code[j]; //依次显示数字
time1s(); //
P0=0xff; //每次扫描后再关一次数码管,消除拖影
}
}
}