|
123 132 213 231 312 321 这六个数字信息,
TTL通信输入51单片机后,
显示到4位串行595数码管的程序如何写?
并且串口通信和数码管显示的程序单独运行都没问题。
关键是怎样才能组合到一起用???
下面是数码管显示代码,要在程序里改动j=231;switch(j)才能显示。
#include <AT89X51.H>
unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
unsigned char disbuf[4]={0,0,0,0};
//-----------------------------------------------------------------------------
// 函数原形定义
#define uchar unsigned char
void main (void); // 主函数
void LED4_Display (void); // LED显示
void LED_OUT(uchar X); // LED单字节串行移位函数
unsigned char code LED_0F[]; // LED字模表
sbit DIO = P1^0; //串行数据输入
sbit RCLK = P1^1; //时钟脉冲信号——上升沿有效
sbit SCLK = P1^2; //打入信号————上升沿有效
//-----------------------------------------------------------------------------
// 全局变量
uchar LED[8]; //用于LED的8位显示缓存
//*****************************************************************************
// 主程序
//
void main (void)
{
LED[0]=1;
LED[1]=2;
LED[2]=3;
while(1)
{
LED4_Display ();
}
}
void LED4_Display (void)
{
unsigned char code *led_table; // 查表指针
uchar i;
uchar j;
j=231; // *****
switch(j)
{
case 123: //显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;break;
case 132: //显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;break;
case 213: //显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;break;
case 231: //显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;break;
case 312: //显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;break;
case 321: //显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;break;
}
/* //显示第1位
led_table = LED_0F + LED[0];
i = *led_table;
LED_OUT(i);
LED_OUT(0x04);
RCLK = 0;
RCLK = 1;
//显示第2位
led_table = LED_0F + LED[1];
i = *led_table;
LED_OUT(i);
LED_OUT(0x02);
RCLK = 0;
RCLK = 1;
//显示第3位
led_table = LED_0F + LED[2];
i = *led_table;
LED_OUT(i);
LED_OUT(0x01);
RCLK = 0;
RCLK = 1;*/
}
void LED_OUT(uchar X)
{
uchar i;
for(i=8;i>=1;i--)
{
if (X&0x80) DIO=1; else DIO=0;
X<<=1;
SCLK = 0;
SCLK = 1;
}
}
unsigned char code LED_0F[] =
{// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
};
下面就是简单的串口通信程序了。
/**************************************************************************************
* 串口通信实验 *
实现现象:下载程序后打开串口调试助手,将波特率设置为4800,选择发送的数据就可以显示
在串口助手上。
注意事项:无。
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
/*******************************************************************************
* 函数名 :UsartInit()
* 函数功能 :设置串口
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void UsartInit()
{
SCON=0X50; //设置为工作方式1
TMOD=0X20; //设置计数器工作方式2
PCON=0X80; //波特率加倍
TH1=0XF3; //计数器初始值设置,注意波特率是4800的
TL1=0XF3;
ES=1; //打开接收中断
EA=1; //打开总中断
TR1=1; //打开计数器
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
UsartInit(); // 串口初始化
while(1);
}
/*******************************************************************************
* 函数名 : Usart() interrupt 4
* 函数功能 : 串口通信中断函数
* 输入 : 无
* 输出 : 无
*******************************************************************************/
void Usart() interrupt 4
{
u8 receiveData;
receiveData=SBUF;//出去接收到的数据
RI = 0;//清除接收中断标志位
SBUF=receiveData;//将接收到的数据放入到发送寄存器
while(!TI); //等待发送数据完成
TI=0; //清除发送完成标志位
}
求大佬指点怎样把两个程序合并!!!!!- #include <AT89X51.H>
-
- unsigned char code fseg[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char code segbit[]={0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};
- unsigned char disbuf[4]={0,0,0,0};
- //-----------------------------------------------------------------------------
- // 函数原形定义
- #define uchar unsigned char
- void main (void); // 主函数
- void LED4_Display (void); // LED显示
- void LED_OUT(uchar X); // LED单字节串行移位函数
- unsigned char code LED_0F[]; // LED字模表
- sbit DIO = P1^0; //串行数据输入
- sbit RCLK = P1^1; //时钟脉冲信号——上升沿有效
- sbit SCLK = P1^2; //打入信号————上升沿有效
- //-----------------------------------------------------------------------------
- // 全局变量
- uchar LED[8]; //用于LED的8位显示缓存
- //*****************************************************************************
- // 主程序
- //
- void main (void)
- {
- LED[0]=1;
- LED[1]=2;
- LED[2]=3;
-
- while(1)
- {
- LED4_Display ();
- }
- }
- void LED4_Display (void)
- {
- unsigned char code *led_table; // 查表指针
- uchar i;
- uchar j;
- j=231; // *****
- switch(j)
- {
- case 123: //显示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;
- //显示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;
- //显示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;break;
- case 132: //显示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;
- //显示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;
- //显示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;break;
- case 213: //显示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;
- //显示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;
- //显示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;break;
- case 231: //显示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;
- //显示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;
- //显示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;break;
- case 312: //显示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;
- //显示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;
- //显示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;break;
- case 321: //显示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;
- //显示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;
- //显示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;break;
- }
- /* //显示第1位
- led_table = LED_0F + LED[0];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x04);
- RCLK = 0;
- RCLK = 1;
- //显示第2位
- led_table = LED_0F + LED[1];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x02);
- RCLK = 0;
- RCLK = 1;
- //显示第3位
- led_table = LED_0F + LED[2];
- i = *led_table;
- LED_OUT(i);
- LED_OUT(0x01);
- RCLK = 0;
- RCLK = 1;*/
- }
- void LED_OUT(uchar X)
- {
- uchar i;
- for(i=8;i>=1;i--)
- {
- if (X&0x80) DIO=1; else DIO=0;
- X<<=1;
- SCLK = 0;
- SCLK = 1;
- }
- }
- unsigned char code LED_0F[] =
- {// 0 1 2 3 4 5 6 7 8 9 A b C d E F -
- 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x8C,0xBF,0xC6,0xA1,0x86,0xFF,0xbf
- };
复制代码
|
|