数码管(段选和位选)分静态和动态显示,为了节省单片机的IO口和便于控制,一般采用动态显示。
/****作者:爱因斯尼@SCUT***/ /****时间:2010.08.29******/
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
void Init_smg()//数码管的初始化函数
{
P0=0x00;
duan=1;
P0=0x00;
duan=0;
P0=0xff;
wei=1;
P0=0xff;
wei=0;
}
void main()
{Init_smg();
duan=1;
P0=0xfc;
duan=0;
wei=1;
P0=0x00;
wei=0;
}
2.动态显示
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端
uchar code SMG[]={//数码管字模,放在程序的代码区
0xfc,0x60,0xda,0xf2,//0,1,2,3,
0x66,0xb6,0xbe,0xe0, //4,5,6,7,
0xfe,0xf6,0xee,0x3e, //8,9,A,b,
0x9c,0x7a,0x9e,0x8E,0x01};//C,d,E,F
/////////////////////////////
void delay_ms(uint ms)
{
uint i,j;
for(i=0;i<ms;i++)
for(j=0;j<141;j++);
}
////////////////////////////////////////////
void Init_smg()//数码管的初始化函数
{
P0=0x00;
duan=1;
P0=0x00;
duan=0;
P0=0xff;
wei=1;
P0=0xff;
wei=0;
}
///////////////////////数码管的显示子函数
void show_smg(uchar num,uchar awei)//带两个形参的数码管显示函数
{
uchar A=0x80;//这个主要是为了后面的循环移位
P0=0x00;
duan=1;
P0=SMG[num];
duan=0;
P0=0xff;
wei=1;
P0=~(A>>awei);
wei=0;
delay_ms(1);
}
////////////////////////显示8个数
void display(uchar num1,uchar num2,uchar num3,uchar num4,uchar num5,uchar num6,uchar num7,uchar num8)
{
show_smg(num1,0);
show_smg(num2,1);
show_smg(num3,2);
show_smg(num4,3);
show_smg(num5,4);
show_smg(num6,5);
show_smg(num7,6);
show_smg(num8,7);
}
////////////////////////
void main()
{//uchar i;
Init_smg();
while(1)
{
display(1,2,3,4,5,6,7,8);
}
}
欢迎光临我们的淘宝网店:http://item.taobao.com/auction/item_detail.htm?item_num_id=9447334857
文章评论(0条评论)
登录后参与讨论