原创 彬太郎51单片机开发板视频教程C语言版之数码管

2011-3-24 09:08 1629 6 6 分类: MCU/ 嵌入式

attachment downloadd3edc00a-58b4-48ab-8e33-42b0c1a3df66.jpgc332a237-476a-4911-bab7-c15f62a458f9.jpg


数码管(段选和位选)分静态和动态显示,为了节省单片机的IO口和便于控制,一般采用动态显示。



/****作者:爱因斯尼@SCUT***/ /****时间:2010.08.29******/


#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit duan=P1^5;//定义段选端
sbit wei=P1^6;//定义位选端

1.静态显示 

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

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条