找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2848|回复: 16
打印 上一主题 下一主题
收起左侧

STC单片机热敏电阻温度计程序编译不能通过,附STC12C5A.H头文件

[复制链接]
回帖奖励 10 黑币 回复本帖可获得 10 黑币奖励! 每人限 1 次
跳转到指定楼层
楼主
ID:17109 发表于 2019-4-29 11:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
但是用   Keil uVision 4     编译  不能  通过,STC12C5A.H头文件加入    也不成功'劳烦各位师博看看那里 出错谢谢


单片机源程序如下:
  1. //****************************************/
  2. //*     基于STC12C5A60S2的NTC温度计      */
  3. //*       测温范围-40°~110°             */
  4. //****************************************/
  5. //4位共阳极数码管段码a-h接P27-P20,
  6. //位选端接P3高4位
  7. //NTC使用MF52-103/3435;10K±1%精度;B值:3435±1%
  8. //NTC温度输出端子接P1.0

  9. #include "STC12C5A.H"
  10. #include "intrins.h"
  11. #define u8 unsigned char
  12. #define u16 unsigned int
  13. #define u32 unsigned long int
  14. sbit GW=P2^1;                                     //数码管位码
  15. sbit SW=P2^4;                               
  16. sbit BW=P2^3;                                       
  17. sbit QW=P2^2;       
  18. u8 show[4];                         //显示四位数数组
  19. u32  Temp_Buf[9];        //采样数组
  20. u8 Ledcount,ADCcount;    //数码管显示计数变量,ADC采样次数变量
  21. u8 code smg0[12]={0x0a,0xfa,0x4c,0x68,0xb8,0x29,0x09,0x7a,0x08,0x28,0xfd,0xff};           //数码管段码表,不带小数点:0-9,-,灭
  22. u8 code smg1[11]={0x02,0xf2,0x44,0x60,0xb0,0x21,0x01,0x72,0x00,0x20,0xff};               //数码管段码表,带小数点:0-9,灭      
  23. u8 i,j,m,n;
  24. u32 WD;               //温度值
  25. /************************************************
  26.               NTC阻值与温度关系表
  27. ************************************************/
  28. u32 code NTCcode[] = {
  29. /***电阻值(扩大万倍)****温度值*******序号*******/   
  30.                                 1905562,      // -40.00       0
  31.                                 1834132,      // -39.00       1
  32.                                 1756140,      // -38.00       2
  33.                                 1676467,      // -37.00       3
  34.                                 1595647,      // -36.00       4
  35.                                 1515975,      // -35.00       5
  36.                                 1438624,      // -34.00       6
  37.                                 1364361,      // -33.00       7
  38.                                 1293641,      // -32.00       8
  39.                                 1226678,      // -31.00       9
  40.                                 1163519,      // -30.00       10
  41.                                 1104098,      // -29.00       11
  42.                                 1048272,      // -28.00       12
  43.                                 995847,       // -27.00       13
  44.                                 946608,       // -26.00       14
  45.                                 900326,       // -25.00       15
  46.                                 856778,       // -24.00       16
  47.                                 815747,       // -23.00       17
  48.                                 777031,       // -22.00       18
  49.                                 740442,       // -21.00       19
  50.                                 705811,       // -20.00       20
  51.                                 672987,       // -19.00       21
  52.                                 641834,       // -18.00       22
  53.                                 612233,       // -17.00       23
  54.                                 584080,       // -16.00       24
  55.                                 557284,       // -15.00       25
  56.                                 531766,       // -14.00       26
  57.                                 507456,       // -13.00       27
  58.                                 484294,       // -12.00       28
  59.                                 462224,       // -11.00       29
  60.                                 441201,       // -10.00       30
  61.                                 421180,       // -9.00        31
  62.                                 402121,       // -8.00        32
  63.                                 383988,       // -7.00        33
  64.                                 366746,       // -6.00        34
  65.                                 350362,       // -5.00        35
  66.                                 334802,       // -4.00        36
  67.                                 320035,       // -3.00        37
  68.                                 306028,       // -2.00        38
  69.                                 292750,       // -1.00        39
  70.                                 280170,       // 0.00         40
  71.                                 268255,       // 1.00         41
  72.                                 256972,       // 2.00         42
  73.                                 246290,       // 3.00         43
  74.                                 236176,       // 4.00         44
  75.                                 226597,       // 5.00         45
  76.                                 217522,       // 6.00         46
  77.                                 208916,       // 7.00         47
  78.                                 200749,       // 8.00         48
  79.                                 192988,       // 9.00         49
  80.                                 185600,       // 10.00        50
  81.                                 184818,       // 11.00        51
  82.                                 181489,       // 12.00        52
  83.                                 176316,       // 13.00        53
  84.                                 169917,       // 14.00        54
  85.                                 162797,       // 15.00        55
  86.                                 155350,       // 16.00        56
  87.                                 147867,       // 17.00        57
  88.                                 140551,       // 18.00        58
  89.                                 133536,       // 19.00        59
  90.                                 126900,       // 20.00        60
  91.                                 120684,       // 21.00        61
  92.                                 114900,       // 22.00        62
  93.                                 109539,       // 23.00        63
  94.                                 104582,       // 24.00        64
  95.                                 100000,       // 25.00        65
  96.                                 95762,        // 26.00        66
  97.                                 91835,        // 27.00        67
  98.                                 88186,        // 28.00        68
  99.                                 84784,        // 29.00        69
  100.                                 81600,        // 30.00        70
  101.                                 78608,        // 31.00        71
  102.                                 75785,        // 32.00        72
  103.                                 73109,        // 33.00        73
  104.                                 70564,        // 34.00        74
  105.                                 68133,        // 35.00        75
  106.                                 65806,        // 36.00        76
  107.                                 63570,        // 37.00        77
  108.                                 61418,        // 38.00        78
  109.                                 59343,        // 39.00        79
  110.                                 57340,        // 40.00        80
  111.                                 55405,        // 41.00        81
  112.                                 53534,        // 42.00        82
  113.                                 51725,        // 43.00        83
  114.                                 49976,        // 44.00        84
  115.                                 48286,        // 45.00        85
  116.                                 46652,        // 46.00        86
  117.                                 45073,        // 47.00        87
  118.                                 43548,        // 48.00        88
  119.                                 42075,        // 49.00        89
  120.                                 40650,        // 50.00        90
  121.                                 39271,        // 51.00        91
  122.                                 37936,        // 52.00        92
  123.                                 36639,        // 53.00        93
  124.                                 35377,        // 54.00        94
  125.                                 34146,        // 55.00        95
  126.                                 32939,        // 56.00        96
  127.                                 31752,        // 57.00        97
  128.                                 30579,        // 58.00        98
  129.                                 29414,        // 59.00        99
  130.                                 28250,        // 60.00        100
  131.                                 27762,        // 61.00        101
  132.                                 27179,        // 62.00        102
  133.                                 26523,        // 63.00        103
  134.                                 25817,        // 64.00        104
  135.                                 25076,        // 65.00        105
  136.                                 24319,        // 66.00        106
  137.                                 23557,        // 67.00        107
  138.                                 22803,        // 68.00        108
  139.                                 22065,        // 69.00        109
  140.                                 21350,        // 70.00        110
  141.                                 20661,        // 71.00        111
  142.                                 20004,        // 72.00        112
  143.                                 19378,        // 73.00        113
  144.                                 18785,        // 74.00        114
  145.                                 18225,        // 75.00        115
  146.                                 17696,        // 76.00        116
  147.                                 17197,        // 77.00        117
  148.                                 16727,        // 78.00        118
  149.                                 16282,        // 79.00        119
  150.                                 15860,        // 80.00        120
  151.                                 15458,        // 81.00        121
  152.                                 15075,        // 82.00        122
  153.                                 14707,        // 83.00        123
  154.                                 14352,        // 84.00        124
  155.                                 14006,        // 85.00        125
  156.                                 13669,        // 86.00        126
  157.                                 13337,        // 87.00        127
  158.                                 13009,        // 88.00        128
  159.                                 12684,        // 89.00        129
  160.                                 12360,        // 90.00        130
  161.                                 12037,        // 91.00        131
  162.                                 11714,        // 92.00        132
  163.                                 11390,        // 93.00        133
  164.                                 11067,        // 94.00        134
  165.                                 10744,        // 95.00        135
  166.                                 10422,        // 96.00        136
  167.                                 10104,        // 97.00        137
  168.                                 9789,         // 98.00        138
  169.                                 9481,         // 99.00        139
  170.                                 9180,         // 100.00       140
  171.                                 8889,         // 101.00       141
  172.                                 8610,         // 102.00       142
  173.                                 8346,         // 103.00       143
  174.                                 8099,         // 104.00       144
  175.                                 7870,         // 105.00       145
  176.                                 7665,         // 106.00       146
  177.                                 7485,         // 107.00       147
  178.                                 7334,         // 108.00       148
  179.                                 7214,         // 109.00       149
  180.                                 7130,         // 110.00       150
  181. };

  182. void ys1ms(u16 z)               //zms延时函数
  183. {
  184.    u8 x,y;
  185.    for(x=z;x>0;x--)
  186.             for(y=125;y>0;y--);
  187. }          

  188. void XS()                                     //数码管显示函数
  189. {
  190.          for(i=0;i<4;i++)
  191.          {
  192.                   switch(i)                                       
  193.                   {
  194.                            case(0):
  195.                                           GW=0;SW=1;BW=1;QW=1; P0=smg0[show[0]]; break;        //小数位
  196.                            case(1):
  197.                                           GW=1;SW=0;BW=1;QW=1; P0=smg1[show[1]]; break;        //个位带小数点
  198.                            case(2):
  199.                                           GW=1;SW=1;BW=0;QW=1; P0=smg0[show[2]]; break;        //十位
  200.                            case(3):                                                                  
  201.                                           GW=1;SW=1;BW=1;QW=0; P0=smg0[show[3]]; break;        //百位
  202.       }         
  203.                   ys1ms(10);                       
  204.                   GW=1;
  205.                   SW=1;
  206.                   BW=1;
  207.                   QW=1;       
  208.                   P0=0xff;                         
  209.                   ys1ms(10);
  210.    }               
  211. }

  212. void InitADC()                             //ADC初始化
  213. {
  214.          P1ASF=0x80;                             //1000 0000,设置P17作为AD使用
  215.          ADC_RES=0;                              //转换结果寄存器高8位清零
  216.          ADC_RESL=0;                             //转换结果寄存器低2位清零
  217.          ADC_CONTR=ADC_POWER | ADC_SPEEDLL;      //开启AD电源,AD转换速度
  218.          ys1ms(2);                               //延时1ms以上,等待电源稳定
  219. }

  220. u16 AD_GET(u8 ch)         //查询方式AD转换程序
  221. {
  222.          ADC_CONTR=ADC_POWER|ADC_SPEEDLL|ch|ADC_START;
  223.          _nop_();
  224.          _nop_();
  225.          _nop_();
  226.          _nop_();
  227.          while(!(ADC_CONTR & ADC_FLAG));         //等待转换结束
  228.          ADC_CONTR &= ~ADC_FLAG;                 //关闭ADC,AD_FLAG清零
  229.          return(ADC_RES*4+ADC_RESL);             //返回AD转换得到的10位数据(16进制)
  230. }

  231. void Get_Temp()          //读取电阻值
  232. {
  233.    u8 xx;
  234.    u32 sum,RT;
  235.          sum=0;
  236.          RT=0;
  237.          Temp_Buf[8]=(u32)102300000/AD_GET(7)-100000;  //将ADC转换结果换算为电阻值并扩大10000倍
  238.          if( ++ADCcount < 8)                           //采样初期不使用递推滤波算法
  239.    {   
  240.       for(xx=0;xx<8;xx++)                        //准备递推滤波算法的数据
  241.             {
  242.                Temp_Buf[xx]=Temp_Buf[xx+1];            //所有数据循环左移
  243.             }
  244.             RT=Temp_Buf[8];                            //采样初期使用当前采样值
  245.          }
  246.          else                                          //只有采样次数大于8次以后才使用递推滤波算法
  247.          {
  248.             ADCcount=8;                                //采样次数超过8次后,固定设置为8
  249.             for(xx=0;xx<8;xx++)                        //递推滤波算法
  250.             {
  251.                Temp_Buf[xx]=Temp_Buf[xx+1];            //所有数据循环左移
  252.                sum+=Temp_Buf[xx];                      //求和
  253.             }
  254.             RT=sum/8;                                  //求平均值      
  255.          }   
  256.          if (RT>=7130 && RT<=1905562)
  257.          {
  258.       xx=0;       
  259.       while( RT < NTCcode[xx] )                  //将当前电阻值与表对比,得到所在位置
  260.       {   
  261.                xx++;   
  262.             }
  263.             WD=xx*10-((RT+5-NTCcode[xx])*10/(NTCcode[xx-1]-NTCcode[xx])); //插值法计算,数据扩大10倍                                       
  264.       if (WD>400)                                //正温度(大于0度)
  265.       {
  266.                      WD=WD-400;                              //取得0°以上温度
  267.          if (WD>999)                             //大于100度显示最高位
  268.          {   
  269.                                     show[3]=WD/1000;
  270.                                  }
  271.          else                                    //小于100度不显示最高位
  272.          {
  273.                                     show[3]=11;                          //百位
  274.                   show[2]=WD%1000/100;                 //十位
  275.                   show[1]=WD%100/10;                   //个位加小数点
  276.                   show[0]=WD%10;                       //小数位
  277.                                  }
  278.       }
  279.       else                                       //负温度(小于0度)
  280.       {
  281.          WD=400-WD;                              //取得0°以下温度
  282.          show[3]=10;                             //显示负号-
  283.          show[2]=WD/100;
  284.          show[1]=WD%100/10;                      //加小数点
  285.          show[0]=WD%10;
  286.                         }
  287.    }
  288.          else if (RT>1905562)                          //温度低于-40℃,显示-0,表示超出量程(欠量程)
  289.          {
  290.                   show[3]=10;                                //显示负号-
  291.       show[2]=11;
  292.       show[1]=10;                                //加小数点
  293.       show[0]=0;
  294.          }
  295.          else if (RT<7130)                             //温度高于110℃,显示1,表示超量程
  296.          {
  297.                   show[3]=1;                                 //百位
  298.             show[2]=11;                                //十位
  299.             show[1]=10;                                //个位加小数点
  300.             show[0]=11;
  301.          }
  302. }

  303. void main()                                                                                          
  304. {                                      
  305.          InitADC();       
  306.          ADCcount=0;      //ADC采样次数   
  307.          while(1)                                                       
  308.          {                                       
  309.                   Get_Temp();
  310.                         XS();       
  311.    }               
  312. }
复制代码

所有资料51hei提供下载:
STC热敏电阻温度计程序.rar (26.33 KB, 下载次数: 42)



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:155507 发表于 2019-4-29 19:07 | 只看该作者
STC单片机热敏电阻温度计程序编译能通过

linking...
Program Size: data=68.0 xdata=0 code=1943
creating hex file from "STC热敏电阻温度计"...
"STC热敏电阻温度计" - 0 Error(s), 0 Warning(s).


  1. //STC热敏电阻温度计程序  <----------错

  2. //****************************************/
  3. //*     基于STC12C5A60S2的NTC温度计      */
  4. //*       测温范围-40°~110°             */
  5. //****************************************/
  6. //4位共阳极数码管段码a-h接P27-P20,
  7. //位选端接P3高4位
  8. //NTC使用MF52-103/3435;10K±1%精度;B值:3435±1%
  9. //NTC温度输出端子接P1.0
复制代码
回复

使用道具 举报

板凳
ID:357633 发表于 2019-4-29 23:26 | 只看该作者
//STC热敏电阻温度计程序
回复

使用道具 举报

地板
ID:164602 发表于 2019-4-30 08:58 | 只看该作者
编译没问题啊,没错误,没警告。
回复

使用道具 举报

5#
ID:17109 发表于 2019-4-30 23:20 来自手机 | 只看该作者
HC6800-ES-V2.0 发表于 2019-4-30 08:58
编译没问题啊,没错误,没警告。

师博你好,把编译好的代码打包上传看看
回复

使用道具 举报

6#
ID:17109 发表于 2019-4-30 23:28 来自手机 | 只看该作者
angmall 发表于 2019-4-29 19:07
STC单片机热敏电阻温度计程序编译能通过

linking...

师博程序有问题吗,打包上传看看
回复

使用道具 举报

7#
ID:155507 发表于 2019-5-1 08:09 | 只看该作者
ll13536121668 发表于 2019-4-30 23:28
师博程序有问题吗,打包上传看看

打包上传, 编译通过

STC热敏电阻温度计程序.zip

56.29 KB, 下载次数: 32

STC热敏电阻温度计程序

回复

使用道具 举报

8#
ID:17109 发表于 2019-5-1 09:50 来自手机 | 只看该作者
ll13536121668 发表于 2019-4-30 23:28
师博程序有问题吗,打包上传看看

能通过,有看过程序还有其他问题吗?
回复

使用道具 举报

9#
ID:155507 发表于 2019-5-1 14:05 | 只看该作者
ll13536121668 发表于 2019-5-1 09:50
能通过,有看过程序还有其他问题吗?

你好!这个要看你的硬件电路了,每种电路程序完全不一样
回复

使用道具 举报

10#
ID:17109 发表于 2019-5-3 16:32 | 只看该作者
angmall 发表于 2019-5-1 14:05
你好!这个要看你的硬件电路了,每种电路程序完全不一样

我还有一个程序须要师博看看,别人能用Keil uVision 4生成带有可用的代码,   自己都是编译 失败,看看这个程序你能编译通过吗?
回复

使用道具 举报

11#
ID:17109 发表于 2019-5-3 16:36 | 只看该作者
我试过这个是编译不通过的,

12864计算器仿真 代码.rar

61.12 KB, 下载次数: 10

回复

使用道具 举报

12#
ID:213173 发表于 2019-5-3 21:07 | 只看该作者
ll13536121668 发表于 2019-5-3 16:36
我试过这个是编译不通过的,

把<zm.h>内ASCII字模的数据表复制到computer.c文件中,在computer.c文件中注释掉//#include<zm.h>即可

  1. #include<reg52.h>
  2. #include<intrins.h>
  3. //#include<zm.h>
  4. #define uint unsigned int
  5. #define uchar unsigned char
  6. sbit en=P3^0;
  7. sbit rw=P3^1;
  8. sbit rs=P3^2;
  9. sbit cs2=P3^3;
  10. sbit cs1=P3^4;
  11. sbit rst=P3^5;
  12. // ------------------  ASCII字模的数据表 ------------------------ //
  13. // 码表从0x20~0x7e                                                //
  14. // 字库: F:\BaiduNetdiskDownload\常用辅助开发工具\lcd汉字取模软   //
  15. // 件\Asc5x8E.dot 纵向取模下高位                                  //
  16. // -------------------------------------------------------------- //
  17. uchar code nAsciiDot[] =              // ASCII
  18. {
  19.         0x3E,0x51,0x49,0x45,0x3E,0x00, // -0-
  20.         0x00,0x42,0x7F,0x40,0x00,0x00, // -1-
  21.         0x62,0x51,0x49,0x49,0x46,0x00, // -2-
  22.         0x21,0x41,0x49,0x4D,0x33,0x00, // -3-
  23.         0x18,0x14,0x12,0x7F,0x10,0x00, // -4-
  24.         0x27,0x45,0x45,0x45,0x39,0x00, // -5-
  25.         0x3C,0x4A,0x49,0x49,0x31,0x00, // -6-
  26.         0x01,0x71,0x09,0x05,0x03,0x00, // -7-
  27.         0x36,0x49,0x49,0x49,0x36,0x00, // -8-
  28.         0x46,0x49,0x49,0x29,0x1E,0x00, // -9-
  29.         0x22,0x14,0x08,0x14,0x22,0x00, // -*-
  30.         0x08,0x08,0x7F,0x08,0x08,0x00, // -+-
  31.         0x08,0x08,0x08,0x08,0x08,0x00, // ---
  32.         0x08,0x08,0x2a,0x08,0x08,0x00, // -/-
  33.         0x14,0x14,0x14,0x14,0x14,0x00, // -=-
  34.         0x02,0x01,0x59,0x05,0x02,0x00, // -?-
  35. };
  36. uchar key,wei=4,hang=0,k=0;
  37. unsigned long a1=0,a2=0,count=0;
  38. void wc(uchar cmd)
  39. {
  40.         _nop_();
  41.         rs=0;
  42.         rw=0;
  43.         en=1;
  44.         P2=cmd;
  45.         _nop_();
  46.         en=0;
  47. }
  48. void wd(uchar dat)
  49. {
  50.         _nop_();
  51.         rs=1;
  52.         rw=0;
  53.         en=1;
  54.         P2=dat;
  55.         _nop_();
  56.         en=0;
  57. }
  58. void delay(uchar ms)
  59. {
  60.         uchar i,j;
  61.         for(i=ms;i>0;i--)
  62.                 for(j=113;j>0;j--);
  63. }
  64. void set(uchar line,uchar col)
  65. {
  66.         line=line|0xb8;
  67.         col=col|0x40;
  68.         wc(col);
  69.         wc(line);
  70. }
  71. void clean()
  72. {
  73.         uchar i,j,k=0;
  74.         rst=0;
  75.         delay(10);
  76.         rst=1;
  77.         wc(0xc0);//设置显示起始行11xxxxxx
  78.         wc(0x3f);//00111111显示开,00111110显示关
  79.         cs1=0,cs2=0;
  80.         set(0,0);
  81.         for(i=0;i<8;i++)
  82.                 {for(j=0;j<64;j++)
  83.                         wd(0x00);
  84.                         k++;
  85.                         set(k,0);
  86.                         }
  87.         a1=0;a2=0;count=0;k=0;
  88.         wei=4;
  89.         hang=0;
  90. }
  91. void write(uchar zi)
  92. {
  93.         uchar i;
  94.         if(wei<63)
  95.         {
  96.         cs1=0,cs2=1;
  97.         set(hang,wei);
  98.         for(i=0;i<6;i++)
  99.                 wd(nAsciiDot[zi++]);
  100.         wei=wei+6;
  101.         if(wei>59)
  102.         {cs1=1;
  103.         cs2=0;}
  104.         if(hang>7)
  105.         hang=0;
  106.         }
  107.         else
  108.         {
  109.         set(hang,wei-64);
  110.         for(i=0;i<6;i++)
  111.                 wd(nAsciiDot[zi++]);
  112.         wei=wei+6;
  113.         if(wei>123)
  114.         {wei=4;
  115.         hang++;
  116.         cs1=0;
  117.         cs2=1;}
  118.         if(hang>7)
  119.         hang=0;
  120.         }
  121. }
  122. void jis()
  123. {
  124.         switch(k)
  125.         {
  126.                 case 0:
  127.                         break;
  128.                 case 1:
  129.                         count=a2*a1;a1=count;break;
  130.                 case 2:
  131.                         count=a2+a1;a1=count;break;       
  132.                 case 3:
  133.                         count=a2-a1;a1=count;break;
  134.                 case 4:
  135.                         count=a2/a1;a1=count;break;
  136.                 default:
  137.                         break;
  138.         }
  139. }
  140.                        
  141. void rel()
  142. {       
  143.         uchar a=P1;
  144.         write(key);
  145.         while((a&0x0f)!=0x0f)
  146.         {
  147.                 a=P1;
  148.         }       
  149.         switch(key/6)
  150.         {
  151.                 case 0:
  152.                 case 1:
  153.                 case 2:
  154.                 case 3:
  155.                 case 4:
  156.                 case 5:
  157.                 case 6:
  158.                 case 7:
  159.                 case 8:
  160.                 case 9:
  161.                         a1=a1*10+key/6;break;
  162.                 case 10:
  163.                         jis();a2=a1;a1=0;k=1;break;
  164.                 case 11:
  165.                         jis();a2=a1;a1=0;k=2;break;
  166.                 case 12:
  167.                         jis();a2=a1;a1=0;k=3;break;
  168.                 case 13:
  169.                         jis();                                                                                                                        a2=a1;a1=0;k=4;break;
  170.                 case 14:
  171.                         {
  172.                                 switch(k)
  173.                                 {
  174.                                         case 1:
  175.                                                 count=a2*a1;break;
  176.                                         case 2:
  177.                                                 count=a2+a1;break;       
  178.                                         case 3:
  179.                                                 count=a2-a1;break;
  180.                                         case 4:
  181.                                                 count=a2/a1;break;
  182.                                         default:
  183.                                                 break;
  184.                                 }
  185.                                 if(count>999999999)
  186.                                         write(90);
  187.                                 else
  188.                                         if(count>99999999)
  189.                                                 {
  190.                                                  write(count/100000000*6);
  191.                                                  write(count%100000000/10000000*6);
  192.                                                  write(count%10000000/1000000*6);
  193.                                                  write(count%1000000/100000*6);
  194.                                                  write(count%100000/10000*6);
  195.                                                  write(count%10000/1000*6);
  196.                                                  write(count%1000/100*6);
  197.                                                  write(count%100/10*6);
  198.                                                  write(count%10*6);
  199.                                                  }
  200.                                         else
  201.                                         if(count>9999999)
  202.                                                 {
  203.                                                  write(count%100000000/10000000*6);
  204.                                                  write(count%10000000/1000000*6);
  205.                                                  write(count%1000000/100000*6);
  206.                                                  write(count%100000/10000*6);
  207.                                                  write(count%10000/1000*6);
  208.                                                  write(count%1000/100*6);
  209.                                                  write(count%100/10*6);
  210.                                                  write(count%10*6);
  211.                                                  }
  212.                                                  else
  213.                                         if(count>999999)
  214.                                                 {
  215.                                                  write(count%10000000/1000000*6);
  216.                                                  write(count%1000000/100000*6);
  217.                                                  write(count%100000/10000*6);
  218.                                                  write(count%10000/1000*6);
  219.                                                  write(count%1000/100*6);
  220.                                                  write(count%100/10*6);
  221.                                                  write(count%10*6);
  222.                                                  }
  223.                                                  else
  224.                                         if(count>99999)
  225.                                                 {
  226.                                                  write(count%1000000/100000*6);
  227.                                                  write(count%100000/10000*6);
  228.                                                  write(count%10000/1000*6);
  229.                                                  write(count%1000/100*6);
  230.                                                  write(count%100/10*6);
  231.                                                  write(count%10*6);
  232.                                                  }
  233.                                                  else
  234.                                         if(count>9999)
  235.                                                 {

  236.                                                  write(count%100000/10000*6);
  237.                                                  write(count%10000/1000*6);
  238.                                                  write(count%1000/100*6);
  239.                                                  write(count%100/10*6);
  240.                                                  write(count%10*6);
  241.                                                  }
  242.                                                  else
  243.                                         if(count>999)
  244.                                                 {
  245.                                                  write(count%10000/1000*6);
  246.                                                  write(count%1000/100*6);
  247.                                                  write(count%100/10*6);
  248.                                                  write(count%10*6);
  249.                                                  }
  250.                                                  else
  251.                                         if(count>99)
  252.                                                 {
  253.                                                  write(count%1000/100*6);
  254.                                                  write(count%100/10*6);
  255.                                                  write(count%10*6);
  256.                                                  }
  257.                                                  else
  258.                                         if(count>9)
  259.                                                 {
  260.                                                  write(count%100/10*6);
  261.                                                  write(count%10*6);
  262.                                                  }
  263.                                                  else
  264.                                                 {
  265.                                                  write(count%10*6);
  266.                                                  }
  267.                                         a1=count;k=0;
  268.                         }break;                       
  269.                 default:
  270.                         break;
  271.         }
  272. }

  273. void keyscan()
  274. {
  275.         uchar a;
  276.         P1=0xef;
  277.         a=P1;
  278.         a=a&0x0f;
  279.         switch(a)
  280.         {case 7:
  281.                 key=90;clean();break;
  282.         case 11:
  283.                 key=0;rel();break;
  284.         case 13:
  285.                 key=84;rel();break;
  286.         case 14:
  287.                 key=66;rel();break;
  288.         default:
  289.                 break;}
  290.        
  291.         P1=0xdf;
  292.         a=P1;
  293.         a=a&0x0f;
  294.         switch(a)
  295.         {case 7:
  296.                 key=6;rel();break;
  297.         case 11:
  298.                 key=12;rel();break;
  299.         case 13:
  300.                 key=18;rel();break;
  301.         case 14:
  302.                 key=72;rel();break;
  303.         default:
  304.                 break;}
  305.        
  306.         P1=0xbf;
  307.         a=P1;
  308.         a=a&0x0f;
  309.         switch(a)
  310.         {case 7:
  311.                 key=24;rel();break;
  312.         case 11:
  313.                 key=30;rel();break;
  314.         case 13:
  315.                 key=36;rel();break;
  316.         case 14:
  317.                 key=60;rel();break;
  318.         default:
  319.                 break;}
  320.        
  321.         P1=0x7f;
  322.         a=P1;
  323.         a=a&0x0f;
  324.         switch(a)
  325.         {case 7:
  326.                 key=42;rel();break;
  327.         case 11:
  328.                 key=48;rel();break;
  329.         case 13:
  330.                 key=54;rel();break;
  331.         case 14:
  332.                 key=78;rel();break;
  333.         default:
  334.                 break;}
  335. }
  336. void main()
  337. {
  338.         cs1=0;
  339.         cs2=0;
  340.         clean();
  341.         cs1=0;
  342.         while(1)
  343.         {keyscan();
  344.         delay(2);
  345.         }
  346.         }
  347.        
复制代码

回复

使用道具 举报

13#
ID:17109 发表于 2019-5-3 23:01 来自手机 | 只看该作者
wulin 发表于 2019-5-3 21:07
把内ASCII字模的数据表复制到computer.c文件中,在computer.c文件中注释掉//#include即可

师傅修改好用压缩包上传好吗,谢谢
回复

使用道具 举报

14#
ID:213173 发表于 2019-5-4 08:42 | 只看该作者
ll13536121668 发表于 2019-5-3 23:01
师傅修改好用压缩包上传好吗,谢谢

12864计算器.zip (20.09 KB, 下载次数: 17)
回复

使用道具 举报

15#
ID:526827 发表于 2019-5-4 11:07 | 只看该作者
你好!这个要看你的硬件电路了,每种电路程序完全不一样
回复

使用道具 举报

16#
ID:17109 发表于 2019-5-5 10:34 | 只看该作者

#include<AT89X51.H>   //装入AT89X51头文件
#include<ir.h>                        //装入红外解码程序
#include<24c02.H>                //装入24c02读写程序
sbit key=P1^0;                        //定义按键IO
sbit led=P0^0;       //定义指示led
sbit rel=P0^1;                        //定义输出控制脚

unsigned char kaver;  //定义kaver为输出口状态缓存
unsigned char iccdate,irdate;  //定义24c02数据和解码数据

//延时10ms函数,用于开关消抖等
delay10ms()   
{
        unsigned char i,j;        
        for(i=20;i>0;i--)        
        for(j=248;j>0;j--);        
}

//学习红外解码并写入24c02的函数
study()
{
    IR_IN();
        irdate=IRCOM[3];
    iccdate=ReadIIC(W_cmd,0x00,R_cmd);
        if(irdate!=iccdate)        //只在解码结果与读取结果不同时写入24C02
        {
                if(irdate!=0)                        //防止没有接收到红外信号,IRCOM[3]置零时,误写入0
                {
                WP=0;
                WriIIC(W_cmd,0x00,irdate);
                delay10ms();
                WP=1;
                led=0;
                while(key==0);                //学习成功等待按键释放,led停止闪动作为指示
                }
         }
}
//进入学习状态时的led闪动函数
flash()
{
    unsigned char i;
          while(key==0)
          {
             led=~led;
                  for(i=50;i>0;i--)
                                  study();                 
          }
}
//按键模式识别函数
keymod()
{
        unsigned char m=0;
        while(key==0)                          //如果按键按下,开始对按键时间进行计数
        {               
                        delay10ms();                        //计数时间延时
                        m++;
                        delay10ms();                        //计数时间延时
                        if(m>=90)                                //如果计数次数大于90次,等于按键按下时间大于约5秒后,进入led闪动学习模式
                        {
                                m=0;
                                flash();
                        }
        }

         if(m<90)              //如果计数次数小于90,则按键作为开关使用
         {
                 m=0;
                kaver=~kaver;
         }

}
////////////////////主函数////////////////////////////////////
main()
{
        WP=1;                        //24c02写保护
        while(1)
        {
                IRCOM[3]=0;
            IR_IN();                                // 读4字节32位按键编码 ,前16位用户码为IRCOM[1]+IRCOM[2],8位键值码为IRCOM[3]
                irdate=IRCOM[3];                                        //8位键值反码为IRCOM[4] 这里只调用 IRCOM[3]键值码作为数据码
                iccdate=ReadIIC(W_cmd,0x00,R_cmd);
                if(irdate==iccdate)                                                //如果解码结果与24C读取码相同,kaver翻转一次
                {
                        irdate=0;
                        kaver=~kaver;
                }

      if(key==0)        
                        keymod();
                rel=~kaver;
                led=kaver;
        }
}

回复

使用道具 举报

17#
ID:17109 发表于 2019-5-5 10:36 | 只看该作者
师博你好看看这个学习型红外遥控开关是一个c程序,少了<ir.h> <24c02.H>   看看能用Keil uVision 4编译   通过生成代码吗?    修改好用压缩包上传,谢谢

学习型红外遥控开关.rar

1.14 KB, 下载次数: 8

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表