您的位置:首页 > 其它

串口通过164控制三个数码管

2011-04-30 14:43 302 查看


/*****************************************/
/*功能:按键控制数码管显示数;
/*作者:oych
/* 日期:2011.4.30
/****************************************/
#include <reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit setup=P1^0;
sbit add=P1^1;
sbit sub=P1^2;
uchar data_in[3]={0};
uchar sign=10,gw=0,sw=0,value=0;
uchar code list[]={0x03,0x9f,0x24,0x0c,0x98,//
0x48,0x40,0x1f,0x00,0x08,0xff,0xfc,};//0,1,2,3,4,5,6,7,8,9,空,-,
/*****************************************/
/*功能:10ms的延时;
/****************************************/
void delay(uint t)
{
uchar k;
while(t--)
{
for(k=0;k<114;k++);
}
}
/*****************************************/
/*功能:串口发送数据;
/****************************************/
void wr_byte(uchar num)
{
SBUF = num; //发送数据
while (!TI);
TI = 0; //发送完毕,清中断标志
}
/*****************************************/
/*功能:数据发送处理;
/****************************************/
void display()
{
sw=value/10;
gw=value%10;
wr_byte(list[gw]);
wr_byte(list[sw]);
wr_byte(list[sign]);
}
/*****************************************/
/*功能:数值加;
/****************************************/
void plus()
{
if(add==0)
{
delay(50);
if(add==0)
{
if(value==99)
value=0;
if(sign==11)
{
if(value==1)
{
value=0;
sign=10;
}
else
value--;
}
else
value++;
display();
}
}
}
/*****************************************/
/*功能:数值减;
/****************************************/
void dec()
{
if(sub==0)
{
delay(50);
if(sub==0)
{
if(value<=1||(sign==11))
{
sign=11;//负号;
value++;
}
else
{
value--;
sign=10;//正号;
}
display();
}
}
}
/*****************************************/
/*功能:主函数;
/****************************************/
void main(void)
{
SCON = 0x00; //设置串行口工作方式0,发送 rx数据端,低位在前,高位在后;
display();
P1=0xff;
while(1)
{
if(setup==0)
{
delay(50);
if(setup==0)
{
plus();
dec();
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: