6个74hc595级联驱动6个8位数码管,显示乱码
6个74hc595级联驱动6个8位数码管(每个595驱动一个数码管),除了第一位外其他位都显示乱码,而且每次复位后乱码都改变,若i改成6,则乱码一直在变,这是为什么呢?这...
6个74hc595级联驱动6个8位数码管(每个595驱动一个数码管),除了第一位外其他位都显示乱码,而且每次复位后乱码都改变,若i改成6,则乱码一直在变,这是为什么呢?这是我的程序
#include <reg52.h> //51芯片管脚定义头文件
#include <intrins.h>
#include <stdio.h> //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code DAT[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x83,0xf8,0x80,0x98};
sbit SDATA_595=P0^0; //串行数据输入
sbit SCLK_595=P0^1; //SHcp移位时钟脉冲
sbit RCK_595=P0^2; //STcp输出锁存器控制脉冲
sbit oe_595=P0^3; //片选
//uchar temp;
/********************************************************/
/* */
/* 延时子程序 */
/* */
/********************************************************/
void delay(int ms)
{
int k;
while(ms--)
{
for(k=0; k<250; k++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************/
/* */
/*将显示数据送入74HC595内部移位寄存器 */
/* */
/********************************************************/
void WR_595(uchar temp)
{
uchar j;
for (j=8;j>0;j--)
{
//temp=temp<<1;
//SDATA_595=CY;
SDATA_595=(temp&0x80);
SCLK_595=0; //上升沿发生移位
_nop_();
_nop_();
SCLK_595=1;
temp=temp<<1;
//SDATA_595=CY;
}
}
/********************************************************/
/* */
/*将移位寄存器内的数据锁存到输出寄存器并显示 */
/* */
/********************************************************/
void OUT_595(void)
{
//RCK_595=0;
// _nop_();
// _nop_();
RCK_595=1; //上升沿将数据送到输出锁存器
_nop_();
_nop_();
_nop_();
RCK_595=0;
}
main()
{
uchar tem;
uchar i,m;
SCLK_595=0;
RCK_595=0;
oe_595=0;
for(i=0;i<2;i++)
{
tem=DAT[i]; //取显示数据
WR_595(tem);
//delay(100);
}
OUT_595();
while(1) //for 在里面和外面一个效果都是乱码
{
// for(i=0;i<6;i++)
// {
// tem=DAT[i]; //取显示数据
// WR_595(tem);
//delay(100);
// }
// OUT_595();
// delay(100);
}
}
级联 没有问题啊 无语了…… 展开
#include <reg52.h> //51芯片管脚定义头文件
#include <intrins.h>
#include <stdio.h> //内部包含延时函数 _nop_();
#define uchar unsigned char
#define uint unsigned int
uchar code DAT[]={0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x83,0xf8,0x80,0x98};
sbit SDATA_595=P0^0; //串行数据输入
sbit SCLK_595=P0^1; //SHcp移位时钟脉冲
sbit RCK_595=P0^2; //STcp输出锁存器控制脉冲
sbit oe_595=P0^3; //片选
//uchar temp;
/********************************************************/
/* */
/* 延时子程序 */
/* */
/********************************************************/
void delay(int ms)
{
int k;
while(ms--)
{
for(k=0; k<250; k++)
{
_nop_();
_nop_();
_nop_();
_nop_();
}
}
}
/********************************************************/
/* */
/*将显示数据送入74HC595内部移位寄存器 */
/* */
/********************************************************/
void WR_595(uchar temp)
{
uchar j;
for (j=8;j>0;j--)
{
//temp=temp<<1;
//SDATA_595=CY;
SDATA_595=(temp&0x80);
SCLK_595=0; //上升沿发生移位
_nop_();
_nop_();
SCLK_595=1;
temp=temp<<1;
//SDATA_595=CY;
}
}
/********************************************************/
/* */
/*将移位寄存器内的数据锁存到输出寄存器并显示 */
/* */
/********************************************************/
void OUT_595(void)
{
//RCK_595=0;
// _nop_();
// _nop_();
RCK_595=1; //上升沿将数据送到输出锁存器
_nop_();
_nop_();
_nop_();
RCK_595=0;
}
main()
{
uchar tem;
uchar i,m;
SCLK_595=0;
RCK_595=0;
oe_595=0;
for(i=0;i<2;i++)
{
tem=DAT[i]; //取显示数据
WR_595(tem);
//delay(100);
}
OUT_595();
while(1) //for 在里面和外面一个效果都是乱码
{
// for(i=0;i<6;i++)
// {
// tem=DAT[i]; //取显示数据
// WR_595(tem);
//delay(100);
// }
// OUT_595();
// delay(100);
}
}
级联 没有问题啊 无语了…… 展开
3个回答
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32是一款广泛应用于消费类电子、汽车、工业和物联网领域的低功耗嵌入式系统芯片。ST公司推出了多个STM32系列,以满足不同应用需求。以下是ST公司主要的STM32系列:1. STM32WB系列:这是ST公司推出的第一款支持2.4GHz...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询