玩过51的开发者们一定对这种板子很熟悉
今天我们探讨如何让单片机右上角这个数码管显示数据呢?
根据各自不同厂商的单片机原理图,去寻找哪几个引脚是数码管位控制,我这个板子的数码管控制位是P10-P13,所以我在代码中要定义
且要注意,我的单片机P00-P07是共阳数码管LCD数据并行总线。在代码中要注意赋值。
至此,数码管显示函数就写好了,主函数中根据自己的需求进行定制设计。
注:数码管要显示小数点可以在对应位后加& 0x7f。共阴极数码管 对应位 | 0x80,可将dp位点亮。
秒表设计完整代码:
#include "reg52.h"
#include "intrins.h"
unsigned char table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit SMG_q = P1^0; //¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨Ç§Î»£©
sbit SMG_b = P1^1; //¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨°Ù룩
sbit SMG_s = P1^2; //¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨Ê®Î»£©
sbit SMG_g = P1^3; //¶¨ÒåÊýÂë¹ÜÑô¼¶¿ØÖƽţ¨¸ö룩
sbit start=P3^7;
sbit stop=P3^6;
sbit over=P3^5;
sbit ming=P1^5;
unsigned char ldata=0000; //±äÁ¿ÓÃ×÷0~99¼ÆÊý
void display(unsigned char da);//¶¨ÒåÏÔʾº¯Êý£¬²ÎÊýΪÏÔʾÄÚÈÝ£¬Ö»ÏÔʾÁ½Î»Êý
void delay(void);
void Delay100ms() //@12.000MHz
{
unsigned char i, j;
i = 195;
j = 138;
do
{
while (--j);
} while (--i);
}
void Delay1000ms() //@12.000MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 154;
k = 122;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
//Ö÷º¯Êý£¬CÓïÑÔµÄÈë¿Úº¯Êý:
void main(void)
{
unsigned char i=0; //×÷Ϊ²é±íµÄË÷ÒýºÅ
//unsigned char ldata=0000; //±äÁ¿ÓÃ×÷0~99¼ÆÊý
unsigned int j; //´Ë±äÁ¿×÷Ϊ¼ÆÊýÌø±äË¢ÐÂʱ¼ä
while(1)
{
j=200;
while(j--){
display(ldata);
}
if(ldata<600)
ldata++; //Ë¢ÐÂÍê³ÉÔ¼1Ã룬±äÁ¿×ö¼Ó¼ÆÊý
else
ldata=0;
if (over==0){
ming=0;
ldata=0000;
Delay100ms();
ming=1;
display(ldata);
while(start==1)
{
display(ldata);
}
if(start==0){
ming=0;
Delay100ms();
ming=1;
}
}
if(stop==0){
ming=0;
Delay100ms();
ming=1;
while(start==1){
display(ldata);
}
}
if(start==0){
ming=0;
Delay100ms();
ming=1;
}
}
}
}
//ÏÔʾº¯Êý£¬²ÎÊýΪÏÔʾÄÚÈÝ£¬Ö»ÏÔʾÁ½Î»Êý
void display(unsigned char da)
{
SMG_g=0; //Ñ¡Ôñ¸öλÊýÂë¹Ü
P0=table[da%10]; //»ñÈ¡¸öλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
delay(); //ÑÓʱ
P0=0XFF; //Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
SMG_g=1; //¹Ø±Õ¸öλÊýÂë¹Ü
SMG_s=0; //Ñ¡ÔñʮλÊýÂë¹Ü
P0=table[da/10%10]& 0x7f; //»ñȡʮλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
delay(); //ÑÓʱ
P0=0XFF; //Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
SMG_s=1; //¹Ø±ÕʮλÊýÂë¹Ü
SMG_b=0; //Ñ¡Ôñ°ÙλÊýÂë¹Ü
P0=table[da/100%10]; //»ñÈ¡°Ùλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
delay(); //ÑÓʱ
P0=0XFF; //Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
SMG_b=1; //¹Ø±Õ°ÙλÊýÂë¹Ü
SMG_q=0; //Ñ¡ÔñǧλÊýÂë¹Ü
P0=table[da/1000]; //»ñȡǧλֵ£¬²é±íÊä³ö¶¨ÒåºÃµÄÊýÂë¹Ü¶ÎÖµÓëP0¿Ú£¬ÏÔʾÏàÓ¦µÄ0-9
delay(); //ÑÓʱ
P0=0XFF; //Çå³ýÊýÂë¹ÜÏÔʾ£¬ÒòÊǹ²ÑôÐÍ£¬ËùÒÔ²»ÊÇ0
SMG_q=1; //¹Ø±ÕǧλÊýÂë¹Ü
}
//ÑÓʱ×Óº¯Êý,¶ÌÔÝÑÓʱ
void delay(void){
unsigned char i=10;
while(i--);
}