Developers who have played 51 must be familiar with this board
Today we discuss how to make the digital tube in the upper right corner of the microcontroller display data?
According to the schematic diagrams of single-chip microcomputers from different manufacturers, find out which pins are controlled by the digital tube position. The digital tube control bits of my board are P10-P13, so I need to define in the code
And it should be noted that my single-chip microcomputer P00-P07 is a common anode digital tube LCD data parallel bus. Be careful with assignments in your code.
So far, the digital tube display function has been written, and the main function is customized according to your needs.
Note: To display the decimal point on the digital tube, you can add & 0x7f after the corresponding digit. The corresponding bit of the common cathode digital tube is | 0x80, which can light up the dp bit.
Stopwatch design complete code:
#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--);
}