📄 display.c
字号:
#include <stdio.h>
#include <reg52.h>
#include <intrins.h>
#include <rtx51tny.h>
#include <string.h>
#define uchar unsigned char
#define uint unsigned int
#define OFF 1
#define ON 0
sbit RED_LED = P2^0;//red led;
sbit LED1=P2^5;//数码管1位选,从左往右:--->>>
sbit LED2=P2^4;//数码管2位选
sbit LED3=P2^1;//数码管3位选
sbit LED4=P3^7;//数码管4位选
sbit DP=P0^2;//小数点
uchar Endreceive;
uchar count;
uchar idata buffer[5];//数据缓冲区
uchar idata buf_receive[10];
uchar idata buf[20];
uchar idata disp_buffer[6],led_buffer[4];//,disp_buffer,led buffer
uchar code led_code[]={
0x05, //0
0x7D, //1
0x46, //2
0x54, //3
0x3C, //4
0x94, //5
0x84, //6
0x5D, //7
0x04, //8
0x14, //9
0x0C, //10_"A"
0xA4, //11_"b"
0x87, //12_"C"
0x64, //13_"d"
0x86, //14_"E"
0x8E, //15_"F"
0xFE, //16_"-"
0xFF, //17_全灭
0x05&0xFB, //18 0.
0x7D&0xFB,//19 1.
0x46&0xFB,//20 2.
0x54&0xFB,//21 3.
0x3C&0xFB,//22 4.
0x94&0xFB,//23 5.
0x84&0xFB,//24 6.
0x5D&0xFB,//25 7.
0x04&0xFB,//26 8.
0x14&0xFB,//27 9.
0x0C&0xFB,//28 A.
0xA4&0xFB,//29 B.
0x87&0xFB,//30 C.
0x64&0xFB,//31 D.
0x86&0xFB,//32 E.
0x8E&0xFB,//33 F.
0xFE&0xFB,//34 -.
0xFF&0xFB,//35 .
//0x54 //19 "N"
};
void initialion();
void display(uchar dis_code,uchar dis_position);
void display_date(uchar flag);
void dis_delaytime(uchar num); //延时1.8MS
void WirteCom(uchar nLen);
void init_timer(void);
void delay(void);
void show_led();
/******************************************************************************/
/* */
/******************************************************************************/
job0 () _task_ 0
{
//initialion();
os_create_task (1);
while (1)
{
memset(disp_buffer,'\0',6);
strcpy(disp_buffer,"1B-.4");
show_led();
RED_LED = 0;
os_wait(K_TMO,100,0);
/* memset(disp_buffer,'\0',6);
strcpy(disp_buffer,"12.34");
show_led();
RED_LED = 1;
os_wait(K_TMO,100,0);
memset(disp_buffer,'\0',6);
strcpy(disp_buffer,"1.234");
show_led();
os_wait(K_TMO,100,0);
memset(disp_buffer,'\0',6);
strcpy(disp_buffer,".123");
show_led();
os_wait(K_TMO,100,0);
memset(disp_buffer,'\0',6);
strcpy(disp_buffer,"1234.");
show_led();
os_wait(K_TMO,100,0);*/
}
}
/******************************************************************************/
/* Task 1 'job1': RTX-51 tiny starts this task with os_create_task (1) */
/******************************************************************************/
//led driver
job1 () _task_ 1
{
while(1)
{
display_date(0);
}
}
/***********************************************************
函 数 名:void display(uchar dis_code,uchar dis_position)
功 能:显示1个数码管
入口参数:dis_code:显示的段码,dis_position:LED数码管的位置
出口参数:无
返 回 值:无
***********************************************************/
void display(uchar dis_code,uchar dis_position)
{
uchar lcoder;
P0=0xFF;//清段码,防止残留显示
switch(dis_position) //送位选
{
case 1: LED1=ON;
LED2=OFF;
LED3=OFF;
LED4=OFF;
break;
case 2: LED1=OFF;
LED2=ON;
LED3=OFF;
LED4=OFF;
break;
case 3: LED1=OFF;
LED2=OFF;
LED3=ON;
LED4=OFF;
break;
default: LED1=OFF;
LED2=OFF;
LED3=OFF;
LED4=ON;
break;
}
if(dis_code == 0x12)
{
if(dis_position == 1)
lcoder = 0xFB;
else
lcoder = (lcoder & 0xFB);
}
else
{
lcoder = led_code[dis_code];// & 0x1F];
}
P0=lcoder;//送段码
}
/***********************************************************
函 数 名:void display_date(bit flag)
功 能:显示子函数,4位1组
入口参数:
出口参数:无
返 回 值:无
***********************************************************/
void display_date(uchar flag)
{
display(led_buffer[0],0x01);//显示第1位
dis_delaytime(10);
display(led_buffer[1],0x02);//显示第2位
dis_delaytime(10);
display(led_buffer[2],0x03);//显示第3位
dis_delaytime(10);
display(led_buffer[3],0x04);//显示第4位
dis_delaytime(10);
//if(flag)
// {
// DP = 0;
//}
//P0=0xFF;
}
void show_led()
{
uchar i,j;
i = 0;
/* for(j=0;j<4;j++)
{
if(disp_buffer[i] == '.')
{
led_buffer[j] = 18;
i++;
}
i++;
if((disp_buffer[i] >='0') && (disp_buffer[i] <='9'))
led_buffer[j] = disp_buffer[i] - '0';
else if((disp_buffer[i] >='A') && (disp_buffer[i] <='F'))
led_buffer[j] = disp_buffer[i] - 'A' + 10;
else if ((disp_buffer[i] == '-'))
led_buffer[j] = 16;
else
led_buffer[j] = 17;
}
return;*/
if (disp_buffer[0] == '.')
{
led_buffer[i] = 35;
}
else
{
if((disp_buffer[0] >='0') && (disp_buffer[0] <='9'))
led_buffer[i] = disp_buffer[0] - '0';
else if((disp_buffer[0] >='A') && (disp_buffer[0] <='F'))
led_buffer[i] = disp_buffer[0] - 'A' + 10;
else if ((disp_buffer[0] == '-'))
led_buffer[i] = 16;
else
led_buffer[i] = 17;
}
if(disp_buffer[1] == '.')
{
led_buffer[i] = led_buffer[i]+18;
}
else
{
i++;
if((disp_buffer[1] >='0') && (disp_buffer[1] <='9'))
led_buffer[i] = disp_buffer[1] - '0';
else if((disp_buffer[1] >='A') && (disp_buffer[1] <='F'))
led_buffer[i] = disp_buffer[1] - 'A' + 10;
else if ((disp_buffer[1] == '-'))
led_buffer[i] = 16;
else
led_buffer[i] = 17;
}
if(disp_buffer[2] == '.')
{
led_buffer[i] = led_buffer[i]+18;
}
else
{
i++;
if((disp_buffer[2] >='0') && (disp_buffer[2] <='9'))
led_buffer[i] = disp_buffer[2] - '0';
else if((disp_buffer[2] >='A') && (disp_buffer[2] <='F'))
led_buffer[i] = disp_buffer[2] - 'A' + 10;
else if ((disp_buffer[2] == '-'))
led_buffer[i] = 16;
else
led_buffer[i] = 17;
}
if(disp_buffer[3] == '.')
{
led_buffer[i] = led_buffer[i]+18;
}
else
{
i++;
if((disp_buffer[3] >='0') && (disp_buffer[3] <='9'))
led_buffer[i] = disp_buffer[3] - '0';
else if((disp_buffer[3] >='A') && (disp_buffer[3] <='F'))
led_buffer[i] = disp_buffer[3] - 'A' + 10;
else if ((disp_buffer[3] == '-'))
led_buffer[i] = 16;
else
led_buffer[i] = 17;
}
if(disp_buffer[4] == '.')
{
led_buffer[i] = led_buffer[i]+18;
}
else
{
i++;
if((disp_buffer[4] >='0') && (disp_buffer[4] <='9'))
led_buffer[i] = disp_buffer[4] - '0';
else if((disp_buffer[4] >='A') && (disp_buffer[4] <='F'))
led_buffer[i] = disp_buffer[4] - 'A' + 10;
else if ((disp_buffer[4] == '-'))
led_buffer[i] = 16;
else
led_buffer[i] = 17;
}
}
void dis_delaytime(uchar num)
{
uchar i;
for(i=0;i<num;i++)
{
_nop_();
_nop_();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -