• #51单片机#8位数码管(74HC595芯片)的使用方法


    数码管基本属性:
    1.采用2片595驱动数码管,需要单片机3路IO口,根据数码管动态扫描原理进行显示;
    2.宽工作电压3.3V到5V;
    3.PCB板尺寸:71mm*22mm
    4.数码管型号:0.36 4位共阳
    商家给的基本资料:最新八位串行595数码管资料.rar
    QQ截图20150309224143
    8位数码管的连接原理图
    QQ截图20150309224513
    #include <AT89X51.H>
    #include <intrins.h>
    
    // 函数原形定义
    #define uchar unsigned char
    #define uint unsigned int 
    
    void main (void);					// 主函数
    void LED_OUT (uchar X);				// LED单字节串行移位函数
    void LED_print (uchar p, uchar x) ;
    
    unsigned char code LED_0F[];		// LED字模表
    
    sbit DIO    = P1^0;				//串行数据输入
    sbit RCLK   = P1^1;				//时钟脉冲信号——上升沿有效
    sbit SCLK   = P1^2;				//打入信号————上升沿有效
    
    uchar Buffer[4] = {0};          //从串口接收的数据
    
    void Init(void)
    {
        TMOD    = 0x20; //8 位自动重装计数
        PCON   &= 0x7f;
        SCON    = 0x50;//串行口控制寄存器 SM1=1,SM0=0方式一波特率可变
        TH1     = 0xFD; //设置波特率 9600
        TL1     = 0xFD;
        TR1     = 1;    //启动定时器1
        TI      = 0;
        RI      = 0;
        ES      = 1;    //开串口中断
        EA      = 1;    //开总中断
    }
    
    // 主程序
    void main (void) 
    {
        Init();//初始化
    
        LED_print (0x80, 0x0F); //显示启动信息
    
        while(1)
    	{
            switch(Buffer[0])
            {
                case 0x30: LED_print (0x01, 0);    break;
                case 0x31: LED_print (0x01, 1);    break;
                case 0x32: LED_print (0x01, 2);    break;
                case 0x33: LED_print (0x01, 3);    break;
                case 0x34: LED_print (0x01, 4);    break;
                default  : LED_print (0x80, 0x0E); break; 
            }
        }
    } 
    
    void Com_Int(void) interrupt 4
    {
        EA = 0;
        if (RI == 1) //当硬件接收到一个数据时,RI会置位
        {
            Buffer[0] = SBUF ; //这里减去48是因为从电脑中发送过来的数据是ASCII码。// 	Buffer[0] = SBUF-48 ;
            RI = 0; 
        }
        EA = 1;
    }
    
    void LED_print (uchar p, uchar x) 
    {
       	unsigned char code *led_table;          // 查表指针
    	uchar i;
    	unsigned long loop;
    
    	led_table = LED_0F + x;
    	i = *led_table;
    
    	LED_OUT(i);			
    	LED_OUT(p);		
    
    	RCLK = 0;
    	RCLK = 1;
    
    	for(loop = 0; loop < 230; loop++);
    }
    
    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, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E, 0xbf
    };
    
  • 相关阅读:
    显示当前时间和全班学生成绩求和
    js做计算器
    javascript学习内容--改变样式、取消设置、显示内容、隐藏内容
    javascript学习内容--object.style.display="value" value值为“”none“隐藏”或 "block"显示
    元素示例
    Python网页爬虫(一)
    macbook Android开发环境搭建,真机调试
    Shell 脚本编程笔记(一) Hello Shell
    嵌入式开发(一) Ubuntu12.04下搭建交叉编译环境
    算法学习(二) 全排列问题的非递归算法——模拟堆栈
  • 原文地址:https://www.cnblogs.com/motadou/p/4319494.html
Copyright © 2020-2023  润新知