51单片机数码管显示数字以及部分英文字母模板

#include "seg.h"

/*

转换函数,将字符串转换为数组函数,数组内即为段码

pucSeg_Buf为一个数组指针,内部存放的是字符串,最长为8,例如“12.345678”

pucSeg_Code为一个数组指针,内部存放的是转换字符之后的段码,例如上述数字转换为0xF9 0xA4 0x7F 0xB0...

*/
 

void Seg_Tran(unsigned char *pucSeg_Buf , unsigned char *pucSeg_Code )
{
    unsigned char i, j=0, temp;
    
    for(i=0; i<8; i++, j++)            //
    {
        switch(pucSeg_Buf[j])
        {
            case '0': temp= 0xC0;  break;
            case '1': temp= 0xF9;  break;            
            case '2': temp= 0xA4;  break;
            case '3': temp= 0xB0;  break;    
            case '4': temp= 0x99;  break;
            case '5': temp= 0x92;  break;            
            case '6': temp= 0x82;  break;
            case '7': temp= 0xF8;  break;    
            case '8': temp= 0x80;  break;            
            case '9': temp= 0x90;  break;
            
            case 'A': temp= 0x88;  break;    
            case 'B': temp= 0x83;  break;
            case 'C': temp= 0xC6;  break;    
            case 'D': temp= 0xA1;  break;            
            case 'E': temp= 0x86;  break;
            case 'F': temp= 0x8E;  break;                
        
            case 'H': temp= 0x89;  break;    
            case 'L': temp= 0xC7;  break;
            case 'N': temp= 0xC8;  break;    
            case 'P': temp= 0x8C;  break;            
            case 'U': temp= 0xC1;  break;
            case '-': temp= 0xBF;  break;        
            case ' ': temp= 0xFF;  break;
            default: temp= 0xFF;                         
        }
        
        if(pucSeg_Buf[j+1] == '.')
        {
            temp= temp & 0x7F;
            j++;    
        }
        
        pucSeg_Code[i] = temp;
    }
}

/*

数组内容显示函数,将数组中的数值显示出来

pucSeg_Code为要显示的数组数值

ucSeg_Pos为要在数码管第几个位置显示出来

*/

void Seg_Disp( unsigned char *pucSeg_Code, unsigned char ucSeg_Pos)
{
    P0 = 0XFF;  //段选,控制送入的断码数据,消隐处理,防止单片机将上一位的代码显示到下一位
    P2 = P2 & 0X1F | 0XE0;
    P2 &= 0X1F; //    P2 = P2 & 0X1F;        
    
    P0 = 0x01<<ucSeg_Pos;  //位选,控制第几位数码管选通
    P2 = P2 & 0X1F | 0XC0;//接通C0
    P2 &= 0X1F; //    P2 = P2 & 0X1F; //关闭C0
    
    P0 = pucSeg_Code[ucSeg_Pos];     // pucSeg_Code[ucSeg_Pos]为要在第几位显示的数组数组
    P2 = P2 & 0X1F | 0XE0;
    P2 &= 0X1F; //    P2 = P2 & 0X1F;    
}

H文件

#include "STC15F2K60S2.h"


void Seg_Tran(unsigned char *pucSeg_Buf , unsigned char *pucSeg_Code );
void Seg_Disp( unsigned char *pucSeg_Code, unsigned char ucSeg_Pos);

main函数中配置的中断使其使能

  void Time_0 (void) interrupt 1                     //
{

      if(++uiSeg_Dly == 500)                           //数码管显示设置程序,每500秒刷新程序
       uiSeg_Dly = 0;
       Seg_Disp( pucSeg_Code,ucSeg_Pos); //
        if(++ucSeg_Pos ==8)                            //数码管位轮流刷新设置程序
       ucSeg_Pos=0;

}

        void Seg_Proc()

{unsigned int n = 123456;

 if(uiSeg_Dly == 500)                          
       uiSeg_Dly = 0;

{

sprintf ( pucSeg_Buf,"%d"n);//打印函数,可将所需显示的数码管数值打印出来

}

     Seg_Tran(pucSeg_Buf,pucSeg_Code);        //转换函数,可将字符串转换为数码管显示的指针

}

51单片机是一种基于Intel 8051微控制器架构的单片机,广泛用于嵌入式系统的开发。数码管是一种常用的显示设备,可以用来显示数字和一些特定的字母。要控制数码管显示指定的数字或字母,通常需要编写一段程序来驱动数码管的各个段(segment)来形成相应的字符。 以下是一个简单的例子,展示了如何使用C语言编写代码,使得一个共阴极的七段数码管显示数字“0”到“9”和字母“A”、“b”、“C”(假设“C”不区分大小写)。在这个例子中,我们使用了8051单片机的一个端口(比如P2)来驱动数码管。 ```c #include <reg51.h> // 包含51单片机寄存器定义 // 定义数码管的段码,这里使用的是共阴极数码管的编码 unsigned char code SEG_CODE[16] = { 0x3F, // 0 0x06, // 1 0x5B, // 2 0x4F, // 3 0x66, // 4 0x6D, // 5 0x7D, // 6 0x07, // 7 0x7F, // 8 0x6F, // 9 0x77, // A 0x7C, // b // 由于在标准七段数码管中没有定义C的显示方式,这里使用小写字母c的段码来表示大写字母C 0x39, // C 0x5E, // d 0x79, // E 0x71 // F }; // 延时函数 void delay(unsigned int ms) { unsigned int i, j; for (i = ms; i > 0; i--) for (j = 110; j > 0; j--); } void main() { unsigned char i; while (1) { for (i = 0; i < 16; i++) { P2 = SEG_CODE[i]; // 将对应数字或字母的段码输出到P2端口,驱动数码管显示 delay(500); // 延时一段时间以便观察到数码管上的显示变化 } } } ``` 在上述代码中,`SEG_CODE`数组存储了0到9数字和几个字母的段码。主循环中通过改变`i`的值,从`SEG_CODE`数组中取出相应的段码并输出到单片机的P2端口,从而驱动数码管显示相应的字符。`delay`函数用于产生延时,以便人眼能够观察到数码管上的变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值