您的位置 首页 制造

16键计算器 c51完成

1、定时显示开辟一显示缓冲区,显示中断程序定时读取缓冲区显示各灯位,每灯位显示25ms,显示4只灯需要10ms,也就是显示的刷新频率是100H

1、守时显现

拓荒一显现缓冲区,显现中止程序守时读取缓冲区显现各灯位,每灯位显现2.5ms,显现4只灯需求10ms,也便是显现的改写频率是100Hz,亮度为25%。这样既确保亮度又不闪耀,一起CPU还有满足时刻做其他工作。

2、键盘中止扫描

使用键盘中止扫描程序,读出按键的键码,存入键盘缓冲区,供主程序读区。

3、核算器的主程序读取键盘缓冲区的键码,驱动核算器的运转,核算器的运转进程要明晰明晰;

4、核算中需求十进制与十六进制(或二进制)转化。

#define LED_seg      XBYTE[0x6000]     //段码地址#define LED_light    XBYTE[0x8000]      //灯位地址#include "reg51.h"#include "absacc.h"unsigned char read_key(unsigned char);unsigned char display(unsigned char,unsigned char);void delay(unsigned int);unsigned char light[4]={0xfe,0xfd,0xfb,0xf7};   //扫描值 灯位码unsigned char seg[16]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; //段码unsigned char disp_buffer[5]={1,0,0,0,0};            //当前灯位、 显现区unsigned char key_buffer[2]={0,0xff};           //缓冲区满标志、键码void main(){Unsigned char temp[5];unsigned char i;unsigned char operator=0;unsigned int tempa,tempb;bit first=1;TMOD=0x01;       //置T0为方法1TL0=0x0;          //延时2.5mS的守时器初始值TH0=0xf7;          //赋初值PT0=1;             //守时中止0优先设置TR0=1;           //发动守时ET0=1;           //答应守时IT1=0;        //电平触发低电平有用EX1=1;       //答应外中止PX1=1;       // 外部中止1优先级设定EA=1;        //中止总答应while(1){P1=0xf0;                           //扫描if (key_buffer[0]){switch(key_buffer[1])              //缓冲区满{case 0:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9: if (first)  for(i=1;i<=4;i++)   //保存数据,等候另一个数据输入{temp[i]=disp_buffer[i];disp_buffer[i]=0;                                           }first=0;for(i=1;i<=3;i++)  disp_buffer[i]=disp_buffer[i+1];disp_buffer[4]=key_buffer[1];break;case 10:case 11:case 12:case 13:case 14: first=1;tempa=1000*disp_buffer[1]+100*disp_buffer[2]+10*disp_buffer[3]+disp_buffer[4];tempb=1000*temp[1]+100*temp[2]+10*temp[3]+temp[4];switch(operator){case 10:tempa+=tempb;break;case 11:tempa=tempb-tempa;break;case 12:tempa*=tempb;break;case 13:tempa=tempb/tempa;}tempa%=10000;disp_buffer[1]=tempa/1000;tempa%=1000;disp_buffer[2]=tempa/100;tempa%=100;disp_buffer[3]=tempa/10;disp_buffer[4]=tempa%10;operator=key_buffer[1];break;case 15: for(i=1;i<=4;i++)  disp_buffer[i]=temp[i]=0;first=1;operator=0;}key_buffer[0]=0;                     //缓冲区空}          }}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/zhizao/255305.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部