16进制转换算成10进制程序

发布者:云自南国来最新更新时间:2018-03-12 来源: eefocus关键字:16进制  转换  10进制 手机看文章 扫描二维码
随时随地手机看文章

16进制转换算成10进制程序


 unsigned char d[10];    //用于显示的10位显示缓存

 

 //========================================================
    //16进制to10进制输出子程序:显示数据,起始位,结束位,有无小数点
 //========================================================
 void output(unsigned long dd,unsigned char s,unsigned char 
 e,unsigned char DIP) {
    unsigned long div;
    unsigned char tm[8],i,j;
    div=10000000;
    for (i=0;i<8;i++) {
        tm[i]=dd/div;
        dd%=div;
        div/=10;
    }
    for (i=0;i<6;i++) {
        if (tm[i]!=0) break;
        tm[i]=nul;
    }
    tm[5]|=dip;            //小数点控制,请看“串行LED数码管显示驱动程序”
    j=7;
    for (i=s;i        d[i]=tm[j];
        j--;
    }
 }

 //把显示位5-9位的10进制数转换成为16进制数
 unsigned int input(void) {
    unsigned int dd,dat;
    dd=10000;dat=0;
    for (i=5;i<10;i++) {
        dat+=dd*temp;
        dd/=10;
    }
    return(dat);
 }
 /*    89C51系列CPU编程器接收CPU程序*/

 #i nclude
 #i nclude
 #i nclude CC.h>

 #define e 8
 #define p 9
 #define l 10

 sbit led=P3^2;
 sbit p27=P2^7;
 sbit p26=P2^6;
 sbit p36=P3^6;
 sbit p37=P3^7;
 sbit rst=P3^3;
 sbit ale=P3^5;
 sbit vpp=P3^4;

 bit b_break;
 unsigned int adds;


 //    13.8mS
 void int_t0(void) interrupt 1 {
    TH0=-100;
    b_break=1;
 }

 void wait(unsigned char w) {
    unsigned int t=w*184;
    b_break=0;
    TL0=-t%256-1;TH0=-t/256;
    while (b_break==0) {}
 }

 void nop(void) {
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
    _nop_();_nop_();_nop_();_nop_();
 }

 unsigned char command(void) {
    TH0=-100;b_break=0;
    while (RI==0) {if (b_break==1) return(0);}
    RI=0;
    return(SBUF);
 }

 void earsure(unsigned char cpu) {
    switch (cpu) {
    case 1:        //89C51
    case 2:rst=p26=1;p27=p36=p37=0;nop();vpp=1;nop();
        ale=0;wait(110);ale=1;nop();
        break;
    case 3:
    case 4:break;
    case 5:
    case 6:break;
    }
 }

 void program(unsigned char cpu) {
    unsigned int bdata adds=0;
    unsigned char d;
    switch (cpu) {
    case 1:    //89C51
    case 2:
        p36=p37=1;rst=1;
        while (1) {
            TH0=-100;b_break=0;
            while (RI==0) {if (b_break==1) return;}
            RI=0;
            d=SBUF;
            //address
            P0=adds%256;
            P2=adds/256;
            p27=1;
            //data
            P1=d;
            nop();    //48clcl
            //vpp
            vpp=1;
            nop();    //48clcl
            //ale
            ale=0;
            wait(1);//100uS
            ale=1;
            nop();    //10uS
            vpp=0;
            nop();    //48clcl
            p27=0;
            nop();    //48clcl
            P1=0xff;
            TH0=-100;b_break=0;
            while (d!=P1) {if (b_break==1) return;}    //data 
polling
            SBUF=d;
            adds++;
        }
        break;
    case 3:
    case 4:
    case 5:
    case 6:break;
    }
 }

 void LOCk(unsigned char cpu) {
    unsigned char i;
    switch (cpu) {
    case 1:    //89c51
    case 2:
        //lock 1
        rst=p26=p36=p27=p37=1;nop();
        vpp=1;
        nop();
        ale=0;
    //    for (i=0;i<6;i++) wait(100);
        wait(1);
        ale=1;
        nop();
        vpp=0;
        nop();
    
        //lock 2
        rst=p26=p27=1;p36=p37=0;nop();
        vpp=1;
        nop();
        ale=0;
    //    for (i=0;i<6;i++) wait(100);
        wait(1);
        ale=1;
        nop();
        vpp=0;
        nop();
        
        //lock 3
        rst=p26=p36=1;p27=p37=0;nop();
        vpp=1;
        nop();
        ale=0;
    //    for (i=0;i<6;i++) wait(100);
        wait(1);
        ale=1;
        nop();
        vpp=0;
        nop();
        break;
    case 3:
    case 4:
    case 5:
    case 6:break;
    }
 }

 void main(void) {
    unsigned char disp,flash,temp,cpu;
    EA=1;
    SCON=0xd8;PCON=0x80;
    TMOD=0x21;
    TL1=TH1=0xff;TR1=1;
    TH0=-100;ET0=TR0=1;

    flash=0x80;

     while (1) {
         temp=command();
         switch (temp) {
         case 0:
         case 1:        //89c51
         case 2:        //89C52
         case 3:        //80f51
         case 4:        //80F52
         case 5:        //87F51
         case 6:cpu=temp;SBUF=temp;break;//87f52
         case e:SBUF=temp;earsure(cpu);break;    //erasure
         case p:SBUF=temp;program(cpu);break;    //program
         case l:LOCk(cpu);SBUF=temp;break;    //lock
         default:SBUF=temp;break;
         }
         b_break=0;
         if ((++disp)>flash) {disp=0;LED=!led;}
     }
 }
 //HT1380实时时钟驱动程序


 sbit clock_dat=P0^1;
 sbit clock_clk=P0^2;
 sbit clock_rst=P0^3;

 sbit a0=ACC^0;
 sbit a1=ACC^1;
 sbit a2=ACC^2;
 sbit a3=ACC^3;
 sbit a4=ACC^4;
 sbit a5=ACC^5;
 sbit a6=ACC^6;
 sbit a7=ACC^7;

 void clock_out(unsigned char dd) {
     ACC=dd;
     clock_dat=a0;clock_clk=1;clock_clk=0;
     clock_dat=a1;clock_clk=1;clock_clk=0;
     clock_dat=a2;clock_clk=1;clock_clk=0;
     clock_dat=a3;clock_clk=1;clock_clk=0;
     clock_dat=a4;clock_clk=1;clock_clk=0;
     clock_dat=a5;clock_clk=1;clock_clk=0;
     clock_dat=a6;clock_clk=1;clock_clk=0;
     clock_dat=a7;clock_clk=1;clock_clk=0;
 }
 unsigned char clock_in(void) {
     clock_dat=1;
     a0=clock_dat;
     clock_clk=1;clock_clk=0;a1=clock_dat;
     clock_clk=1;clock_clk=0;a2=clock_dat;
     clock_clk=1;clock_clk=0;a3=clock_dat;
     clock_clk=1;clock_clk=0;a4=clock_dat;
     clock_clk=1;clock_clk=0;a5=clock_dat;
     clock_clk=1;clock_clk=0;a6=clock_dat;
     clock_clk=1;clock_clk=0;a7=clock_dat;
     return(ACC);
 }
 unsigned char read_clock(unsigned char ord) {
     unsigned char dd=0;
     clock_clk=0;
     clock_rst=0;
     clock_rst=1;
     clock_out(ord);
     dd=clock_in();
     clock_rst=0;
     clock_clk=1;
     return(dd);
 }
 void write_clock(unsigned char ord,unsigned char dd) {
     clock_clk=0;
     clock_rst=0;
     clock_rst=1;
     clock_out(ord);
     clock_out(dd);
     clock_rst=0;
     clock_clk=1;
 }
 /*单个汉字库字摸提取程序,tc2.0编译*/
 #i nclude "stdio.h"
 #i nclude "dos.h"
 #i nclude "process.h"
 #i nclude "string.h"


 void main(void) {
     long int num_bytes,qm,wm;
     unsigned char d,i,j,k,a[132],b[132];
     unsigned char * data;
     unsigned char * Hz;
     statIC unsigned  char dd[103];
     FILE *FP;

     if ((fp=fopen("hzk16f","rb"))==NULL) {
         printf("CAN't open hzk16n");
         exit(1);
     }
     clrscr();
     while (1) {

         data=(unsigned char *) malloc(33);
         printf("please input:n");
         scanf("%s",dd);    /*输入一个汉字*/

         qm=* dd;        /*通过区位码计算其在hzk16f文件中的偏移地址*/
         qm=qm-161;
         if (qm>87) exit(0);
         wm=* (dd+1);
         wm=wm-161;
         if (wm>94) exit(0);
         num_bytes=((long)qm*94+wm)*32;
         fseek(fp,num_bytes,SEEK_SET);
         fgets(data,33,fp);
         for (i=0;i<32;i++) b[i]=* data++;
         for (i=0;i<32;i+=2) a[i/2]=b[i];
         for (i=0;i<32;i+=2) a[i/2+16]=b[i+1];
         for (i=8;i<16;i++) b[i]=a[i];
         for (i=8;i<16;i++) a[i]=a[i+8];
         for (i=8;i<16;i++) a[i+8]=b[i];

         /*转换,hzf16f在电脑的储存格式是以行为字节计算的,一般的LCD都采用以列为字节计算*/
         for (k=0;k<32;k+=8) {
             for (j=0;j<8;j++) {
                 d=0;
                 for (i=0;i<8;i++) {
                     if (a[i+k]>=0x80) {
                         switch (i) {
                         case 0:d+=1;break;
                         case 1:d+=2;break;
                         case 2:d+=4;break;
                         case 3:d+=8;break;
                         case 4:d+=0x10;break;
                         case 5:d+=0x20;break;
                         case 6:d+=0x40;break;
                         case 7:d+=0x80;break;
                         }
                     }
                 }
                 for (i=0;i<8;i++) a[i+k]<<=1;
                 b[j+k]=d;
             }
         }
         clrscr();
         printf("/*%s:*/n",dd);        /*输出0x00格式的16进制数*/
         for (k=0;k<32;k+=8) {
             for (j=0;j<8;j++) printf("0x%x,",b[j+k]);
             printf("n");
         }
         getch();
     }
 }
 //按键扫描驱动程序

 unsigned char key,key_h,kpush;
 unsigned int key_l;

 //按键连接到p1.0、p1.1、p1.2

 void int_t0(void) interrupt 1 {
     unsigned char dd,i;
     TL0=TL0+30;TH0=0xfb;    //800
     /*    按键判别    */
     if ((P1&0x7)==0x7) {
         if ((key_l>30)&&(key_l<800)&&(key_h>30)) {        
 //释放按键,如果之前按键时间少于1秒,读入键值
             key=kpush;
         }
         if ((++key_h)>200) key_h=200;
         key_l=0;
         if (key>=0x80) key=0;                            
 //如果之前的按键为长按1秒,清除键值
     } else {
         kpush=P1&0x7;
         key_l++;
         if ((key_l>800)&&(key_h>30)) {                    
 //如果按键超过1秒,键值加0x80标志长按键
             key=kpush|0x80;
             key_h=0;
             key_l=0;
         }
     }
 }
 void main(void) {
     TMOD=0x1;TR0=1;ET0=1;EA=1;
     while (1) {
         while (!key) {}
         switch (key) {
         case 1:break;
         case 2:break;
         }
     }
 //串行驱动led显示,
 //一个74hc595位移寄存器驱动三极管驱动led位,
 //两个74hc595驱动led段,方式位5位x8段x2=10个数码管
 //5分频,每次扫描时间位1.25ms


 //定义特殊符号

 #define nul 0xf
 #define qc 0xc
 #define qb 0xb
 #define q_ 0xa
 #define q__ 0xd
 #define q___ 0xe
 #define qp 0x10
 #define qe 0x11
 #define qj 0x12
 #define qn 0x13
 #define qf 0x14
 #define qa 0x15
 #define qr 0x16
 #define qd 0x17
 #define qu 0x18
 #define ql 0x19
 #define qh 0x1a
 #define qwen 0x1b
 #define qt 0x1c
 #define qla 0x1d
 #define qlb 0x1e
 #define qlc 0x1f
 #define qld 0x20
 #define qle 0x21
 #define qlf 0x22
 #define qlg 0x23
 #define qldp 0x24

 //显示段信息,不同LED排列组合的段信息只需更改8个数值即可。
 //因此,该定义具有通用性。


 //    显示    
 //        -d 20
 //    |c 40    |e 10
 //        - g        80        
 //    |b 2    |f 4
 //        _a1    .dp 8
 #define pa 1
 #define pb 2
 #define pc 0x40
 #define pd 0x20
 #define pe 0x10
 #define pf 4 
 #define pg 0x80
 #define PDP 8

 //--------------
 #define l0 PDP+pg
 #define l1 255-pf-pe
 #define l2 PDP+pc+pf
 #define l3 pdp+pc+pb
 #define l4 pdp+pa+pb+pd
 #define l5 pdp+pb+pe
 #define l6 pdp+pe
 #define l7 pdp+pc+pg+pb+pa
 #define l8 pdp
 #define l9 pdp+pb
 #define la pdp+pa
 #define lb pdp+pd+pe
 #define lc pdp+pg+pe+pf
 #define ld pdp+pc+pd
 #define le pdp+pe+pf
 #define lf pdp+pe+pf+pa
 #define l_ 255-pg
 #define lnul 255
 #define ll pdp+pg+pd+pf+pe
 #define lp pdp+pa+pf
 #define lt pdp+pd+pe+pf
 #define lr pdp+pe+pf+pg+pa
 #define ln pdp+pg+pa
 #define lh pdp+pd+pe+pa
 #define ly pdp+pb+pd
 #define lu pdp+pg+pd
 #define l__ pdp+pg+pb+pc+pe+pf
 #define l___ l__-pg
 #define l_1 255-pa
 #define l_2 255-pa-pg
 #define lj 255-(pe+pf+pa)
 #define lwen 255-(pd+pe+pg+pb)
 #define lall 0


 #define lla 255-pa
 #define llb 255-pb
 #define llc 255-pc
 #define lld 255-pd
 #define lle 255-pe
 #define llf 255-pf
 #define llg 255-pg
 #define lldp 255-pdp


 //串行送出的位信息,目前是10位led显示。
 unsigned char code un_dig[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
 //串行送出的短信息。
 unsigned char code 
 un_disp[]={l0,l1,l2,l3,l4,l5,l6,l7,l8,l9,l_,lb,lc,l__,l___,lnul,lp,le,lj,ln,lf,la,lr,ld,lu,
 ll,lh,lwen,lt,lla,llb,llc,lld,lle,llf,llg,lldp,lnul};


 sbit d_clk=P0^0;        //移位时钟
 sbit d_dat=P0^1;        //移位数据
 sbit d_st=P0^2;            //移位锁定


 unsigned char dig;            //位扫描计数器
 unsigned char d[10];                            //显示缓冲

 //送出8位串行数据
 void out_disp(unsigned char dd) {
     unsigned char i;
     for (i=0;i<8;i++) {
         if (dd&1) d_dat=1; else d_dat=0;
         d_clk=0;
         dd>>=1;
         d_clk=1;
     }
 }
 //控制小数点和闪烁,显示数据|0x040表示有小数点;显示数据|0x80表示闪烁。
 void out_displ(unsigned char dd) {
     if (dd>=0x80) {
         if (s001>flash_time) {out_disp(0xff);return;}
     }
     dd&=0x7f;
     if (dd>=0x40) {
         dd=un_disp[dd&0x3f]^pdp;
     } else dd=un_disp[dd];
     out_disp(dd);
 }

 unsigned int s001;    //闪烁时间参考
 void int_t0(void) interrupt 1 {
     unsigned char dd;
     TL0=TL0+30;TH0=0xfb;    //800
     time++;
     if ((++s001)>=800) s001=0;
     //    显示    
     if ((++dig)>4) dig=0;
     d_st=0;
     dd=d[dig+5];
     out_displ(dd);
     dd=d[dig];
     out_displ(dd);
     out_disp(un_dig[dig]);
     d_st=1;
 }
 void main(void) {
     unsigned char i;
     TMOD=0x1;
     TR0=ET0=1;
     EA=1;
     for (i=0;i<10;i++) d[i]=i;    //display test
     while (1) {}
 }


关键字:16进制  转换  10进制 引用地址:16进制转换算成10进制程序

上一篇:X5045组成的看门狗电路及51读写x5045存储器的程序
下一篇:头文件AT89x051.H

推荐阅读最新更新时间:2024-03-16 15:57

将C程序转换成汇编程序
在keil软件中 方法:(假设当前工程中只有一个C代码文件) 第1步:新建一个工程,添加C文件,编译通过 第2步:右击Keil界面中Project Workspace里的C文件名,选择 Option for 第3步:点击 Generate Assembler SRC File Assemble SRC File 两个三态复选框使它们呈高亮并勾选,点击确定 第4步:将KEIL安装目录下C51/LIB/C51S.LIB(如果是SMALL模式)文件复制到工程目录下 第5步:添加库文件C51S.LIB文件到工程,即右击 Source Group $2,选择 Add Files to Group ,
[单片机]
转换器集成技术助力汽车电子性能提升
 “汽车行进中,首要的是对外界位置、角度等信号进行调理、处理,其次才是对这些信号分析后实现操控。因此对半导体厂商而言,处理器、功率器件并不是汽车电子的全部,转换器对于技术的提升具有同样重要的意义。”ADI汽车电子市场部系统应用经理沈飞在日前举办的媒体见面会上做了上述介绍。 据了解,ADI在汽车电子领域专注于绿色节能、安全和舒适三方面,通过将转换器技术与放大器、MEMS、传感器、数字处理器、RF以及功率技术等创新性地进行结合,ADI的汽车电子业务发展迅速,已经占据其整体业务的20%。 三个应用案例可以说明ADI转换器技术所带来的创新。 第一个例子是安全应用方面,应用于安全气囊和ESC系统中的MEMS传感器需要满足很高的性能要求,包括标
[嵌入式]
HiperTFS 器件同时将双管正激主电源转换器和反激式待机电源转换器集成到单个IC中
      Power Integrations公司(纳斯达克股票代号:POWI)今日宣布推出一款适用于高压应用的高集成度电源IC产品系列 - HiperTFS。HiperTFS系列器件是唯一一款同时将双管正激主电源转换器和反激式待机电源转换器集成到单个超薄eSIP功率封装的产品。除了具有两个控制器外,HiperTFS器件还集成了高压端及低压端驱动器,以及用于主电源转换器及待机电源转换器的高压功率MOSFET。因此,HiperTFS是消费类电子产品、计算机,以及要求主电源功率介于120 W和415 W之间、待机电源转换器功率高达20 W的工业电源应用的理想选择。新器件尤其适用于台式计算机、电视机、视频游戏机等要求电源具有高效率且
[电源管理]
HiperTFS 器件同时将双管正激主电源<font color='red'>转换</font>器和反激式待机电源<font color='red'>转换</font>器集成到单个IC中
USB转换方案介绍
随着科技的不断发展,我们的生活中出现了越来越多的电子设备。然而,这些设备通常具有不同的连接端口和协议,这可能会使它们之间的连接变得困难。这时候,使用USB转换就成为了一种非常方便和实用的解决方法。 无论是在家庭、办公室还是旅途中,使用USB转换可以帮助我们更加便捷地连接各种设备,提高工作和生活的效率。 本文将介绍一些常见的USB转换方案内容,帮助您更好地了解和应用。 常见的USB转换方案 1、USB到串口转换: 将USB接口转换为串行通信接口(如RS232、RS485、TTL等),常用于与串口设备(如调试工具、模块、传感器等)进行通信。 2、USB到以太网转换: 将USB接口转换为以太网接口,实现通过USB接口连接到网络的
[嵌入式]
USB<font color='red'>转换</font>方案介绍
意法半导体24位音频数模转换器STw5210问世,采用播放延时技术
  意法半导体(ST)推出一款性能优异的24位分辨率的音频数模转换器(DAC),供移动音乐设备专用。新产品在整个声道内的信噪比达到103分贝,芯片还内置ST的创新的PTE延时播放处理方案,能够把系统功耗降至最低。STw5210单片音频解决方案还集成一个电源管理电路,简化了系统设计,使芯片可以直接连接电池。该产品的封装采用小尺寸的TFBGA和VFQFPN,ST近期还将推出尺寸更小的2.6×2.6mm WLCSP封装。   ST新的数模转换器芯片提供线路和耳机两个输出,能够满足市场对移动音乐手持设备的更高音质和更长播放时间日益增长的需求。因为附加的处理功能,提高音质通常会导致功耗提高。但是,STw5210内置一个PTE模块,在手机的
[手机便携]
ADAS 需要多轨 DC/DC 转换
  ADAS   基本知识 高级驾驶员辅助系统 (Advanced Driver Assistance Systems,ADAS)   有助于安全行驶,并在系统检测到 来自周围物体 有 风险时 可 提醒驾驶 员 ,无论 这是 什么风险   。 增加   ADAS 系统是   2016 年至 2020 年汽车的主要发展趋势之一。这类系统一般提供动态功能 ,例如自适应巡航控制、盲点检测、车道偏离报警、打盹监视、夜视以及更多动态功能。 消费者对行车安全日益关注、 要求舒适行驶 ,政府的行车安全法规也在不断增加, 这些因素都促进了 ADAS 在汽车中的增长。 大多数 ADAS 系统的核心是某种微处理器, 微处理器处理来自
[汽车电子]
MAX19542 模拟数字转换器(ADC)
MAX19542是单片、12位、170Msps的 模拟-数字转换器 (ADC),经过了优化,在300MHz以及以上的高IF频率上具有出色的动态性能。该器件转换速率可达170Msps,而功耗仅为907mW。   采样速率170Msps,输入频率240MHz时, MAX19542具有76.4dBc的无杂散动态范围(SFDR)。器件在10MHz的频率上具有出色的65dB信噪比(SNR),在高达250MHz的输入频率范围内保持平坦(3dB以内)。此特性使MAX19542非常适合蜂窝基站收发系统中功放预失真等宽带应用。   当数据以相同的采样速率输出到单路并口时,MAX19542工作于并行模式;当数据以采样率的一半输出到两个独立的并口时
[模拟电子]
MAX19542 模拟数字<font color='red'>转换</font>器(ADC)
基于光强传感器TSL256x的感测系统设计
1 TSL256x简介   TSL2560和TSL2561是TAOS公司推出的一种高速、低功耗、宽量程、可编程灵活配置的光强度数字转换芯片。该芯片可广泛应用于各类显示屏的监控,目的是在多变的光照条件下,使得显示屏提供最佳的显示亮度并尽可能降低电源功耗;还可以用于街道光照控制、安全照明等众多场合。该芯片的主要特点如下: ◇ 可编程设置许可的光强度上下阈值,当实际光照度超过该阈值时给出中断信号; ◇ 数字输出符合标准的SMBus(TSL2560)和I2C(TSL2561)总线协议; ◇ 模拟增益和数字输出时间可编程控制; ◇ 1.25 mm×1.75 mm超小封装,在低功耗模式下,功耗仅为0.75 mW; ◇ 自动抑制50 Hz/
[应用]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved