历史上的今天
返回首页

历史上的今天

今天是:2025年03月13日(星期四)

正在发生

2020年03月13日 | 基于单片机的银行利率显示屏的设计

2020-03-13 来源:eefocus

#include //头文件

#include “intrins.h” //头文件

#define INT8U unsigned char //宏定义

#define INT16U unsigned int

#define uchar unsigned char

#define uint unsigned int

#define ulong unsigned long


sbit wei1 = P2^0; //数码管的位选端口

sbit wei2 = P2^1;

sbit wei3 = P2^2;

sbit wei4 = P2^3;


sbit K1=P2^7;

sbit ledg=P3^0;

sbit ledr=P3^1;


bit flag0,flag1,flag2;//定义标志位

uchar temp,key;


unsigned int Num1=0,Num2=0;//定义变量


uchar code table_dm[11]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff};//共阳极数码管断码表

uchar code table_dd[11]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0x7f};//共阳极数码管断码表


uint Display_Buffer[4]={1,0,0,0}; //定义数组

uint a,b,n; //定义变量


void delayms(uint xms) //延时子程序

{

int i,j;

for(i=xms;i>0;i–)

for(j=110;j>0;j–);

}

void delay1(uint z)//延时为 1ms

{

uchar x,x1;

for(;z>0;z–)

{

for(x=0;x<114;x++)

{

for(x1=0;x1<1;x1++);

}

}

}

void delay()//5us延时

{

nop();

nop();

nop();

}


void system_Ini() //系统设置初始化

{

TMOD = 0x00; //选择模式0 13位计数 最大计数8192

TH0 = (8192 - 1000)/32;

TL0 = (8192 - 1000)%32 ;

IE = 0x8A; //中断

TR0 = 1; //开启T0定时器

}

void keyscan(void)

temp = 0;

P1=0xF0; //高四位输入 列为高电平 行为低电平

delay1(1); //延时

temp=P1; //读P1口

temp=temp&0xF0; //屏蔽低四位

temp=~((temp>>4)|0xF0);

if(temp1) // p1.4 被拉低

key=0; //第1个按键键值

else if(temp2) // p1.5 被拉低

key=1; //第2个按键键值

else if(temp4) // p1.6 被拉低

key=2; //第3个按键键值

else if(temp8) // p1.7 被拉低

key=3; //第4个按键键值

else

key = 16;


P1=0x0F;             //低四位输入  行为高电平 列为低电平

delay1(1); //延时

temp=P1;             //读P1口       

temp=temp&0x0F;

temp=~(temp|0xF0);

if(temp==1)    //第一行  p1.1  被拉低(直接temp==2 是因为我们P1.0空的,是3*4的矩阵键盘)

    key=key+0; 

else if(temp==2)    //第一行  p1.1  被拉低(直接temp==2 是因为我们P1.0空的,是3*4的矩阵键盘)

    key=key+4; 

else if(temp==4)   //第二行  p1.2  被拉低

    key=key+8;

else if(temp==8)   //第三行 p1.3  被拉低

    key=key+12;

else

  key = 16;


// 

// dis_buf = key; //键值入显示缓存

// dis_buf = dis_buf & 0x0f;

if(key16)

{

flag0=0;

}

if(key!=16)

{

if(key0&&flag00)

{

flag0=1;

if(a0);

else if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=0;

a++;

if(flag2==1)

b++;

}


}

else if(key==1&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=1;

a++;

if(flag2==1)

b++;

}

}

else if(key==2&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=2;

a++;

if(flag2==1)

b++;

}

}

  else if(key==3&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=3;

a++;

if(flag2==1)

b++;

}

}

else if(key==4&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=4;

a++;

if(flag2==1)

b++;

}

}

else if(key==5&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=5;

a++;

if(flag2==1)

b++;

}

}

else if(key==6&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=6;

a++;

if(flag2==1)

b++;

}

}

else if(key==7&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=7;

a++;

if(flag2==1)

b++;

}

}

else if(key==8&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=8;

a++;

if(flag2==1)

b++;

}

}

else if(key==9&&flag0==0)

{  

flag0=1;

if(a<4)

{

Display_Buffer[0]=Display_Buffer[1];

Display_Buffer[1]=Display_Buffer[2];

Display_Buffer[2]=Display_Buffer[3];

Display_Buffer[3]=9;

a++;

if(flag2==1)

b++;

}

}

else if(key==10&&flag0==0)

{  

flag0=1;

if(a<4&&flag2==0)

{

Display_Buffer[3-a]=0;

if(a==0)

a=1;

b=1;

flag2=1;

}

}

else if(key==11&&flag0==0)

{  

flag0=1;

a=0;

b=0;

Display_Buffer[0]=Display_Buffer[1]=Display_Buffer[2]=Display_Buffer[3]=0;

flag2=0;

}

}


}


void main(void) //主函数

{

uchar i;

system_Ini(); //系统设置初始化子程序

a=4;

b=4;

ledg=0;

ledr=1;

while(1) //大循环

{

keyscan();

if(K10)

{

while(K10);

flag1=~flag1;

a=0;

b=0;

Display_Buffer[0]=Display_Buffer[1]=Display_Buffer[2]=Display_Buffer[3]=0;

flag2=0;

if(flag1==1)

{

ledg=1;

ledr=0;

}

else

{

ledg=0;

ledr=1;

}

}

}


}


void T0zd(void) interrupt 1 //3定时器1的中断号 1定时器0的中断号 0外部中断1 2外部中断2 4串口中断

{


 TH0 = (8192 - 1000)/32;   //1ms装载初值        保险,卡顿

 TL0 = (8192 - 1000)%32;  


 if(flag1==1)

 {

Num1=0;

wei1=wei2=wei3=wei4=0;

 }

 else

 Num2++;

 Num1++;

 

if(Num2>10)    //扫描数码管程序

{

Num2=0;

n++;

wei1=wei2=wei3=wei4=0;

P0=0xff;

if(n>3)

n=0;

if(n==0)

if(a!=4)

P0=0xff;

else

{

  if(b==4)

P0=table_dd[Display_Buffer[n]];

else

P0=table_dm[Display_Buffer[n]];

}

wei1=0;

wei2=1;

wei3=1;

wei4=1;

}

else if(n==1)

{

if(a<3)

P0=0xff;

else

{

  if(b==3)

P0=table_dd[Display_Buffer[n]];

else

P0=table_dm[Display_Buffer[n]];

}

wei1=1;

wei2=0;

wei3=1;

wei4=1;

}

else if(n==2)

{

  if(a<2)

P0=0xff;

else

{

  if(b==2)

P0=table_dd[Display_Buffer[n]];

else

P0=table_dm[Display_Buffer[n]];

}

    wei1=1;

wei2=1;

wei3=0;

wei4=1;

}

else if(n==3)

{

if(b==1)

P0=table_dd[Display_Buffer[n]];

else

P0=table_dm[Display_Buffer[n]];

wei1=1;

wei2=1;

wei3=1;

wei4=0;

}

 


}


推荐阅读

史海拾趣

Easy Braid公司的发展小趣事

Easy Braid公司,从一家名不见经传的小型电子制造商起家,其发展的故事始于一次技术创新。在公司成立初期,面对市场上繁多的线缆管理方案,Easy Braid的创始人意识到传统方法的局限性,于是带领团队研发了一种新型的线缆编织技术——Easy Braid技术。这种技术不仅提高了线缆的耐用性和美观度,还大大简化了安装过程。随着这一技术的推出,Easy Braid开始逐渐在电子行业中崭露头角。

Cortina Systems Inc公司的发展小趣事

Easy Braid公司,从一家名不见经传的小型电子制造商起家,其发展的故事始于一次技术创新。在公司成立初期,面对市场上繁多的线缆管理方案,Easy Braid的创始人意识到传统方法的局限性,于是带领团队研发了一种新型的线缆编织技术——Easy Braid技术。这种技术不仅提高了线缆的耐用性和美观度,还大大简化了安装过程。随着这一技术的推出,Easy Braid开始逐渐在电子行业中崭露头角。

DEWALT公司的发展小趣事

DEWALT公司成立于1924年,由雷蒙得伟(Raymond Dewalt)创立。他是一位富有远见的发明家和企业家,对电动工具行业有着浓厚的兴趣。雷蒙得伟发明了摇臂锯,这一创新产品成为当时市场上的一颗新星。凭借这一发明,DEWALT公司开始进入电动工具行业,并逐渐在市场中树立了自己的品牌形象。

DESCO公司的发展小趣事

随着防静电产品市场的不断扩大,DESCO公司开始着手进行市场拓展和品牌塑造。公司通过参加国际展会、举办技术研讨会等方式,积极向全球客户展示其防静电产品的技术优势和应用前景。同时,DESCO还加大了品牌宣传力度,提高了品牌知名度和美誉度。这些举措为公司在全球范围内赢得了大量忠实客户,市场份额持续增长。

Clover Display Limited公司的发展小趣事

随着中国内销市场的不断扩大,Clover Display Limited看到了巨大的商机。为了更好地服务中国内销客户,公司在2001年在深圳南山区成立了高华电子显示(深圳)有限公司。这家子公司以独资经营方式运作,可以开具增值税发票,以人民币结算,从而更加便捷地服务中国客户。深圳子公司的成立不仅拓宽了公司的销售渠道,也为其在中国市场的进一步发展奠定了坚实基础。

Amplitronix LLC公司的发展小趣事

在快速发展的同时,Amplitronix LLC也积极承担社会责任,关注绿色环保。他们投入大量资源研发环保型电子产品,减少生产过程中的污染排放。同时,公司也积极参与公益活动,为社会做出贡献。这些举措不仅提升了公司的社会形象,也为公司的可持续发展注入了新的动力。

这些故事旨在展示Amplitronix LLC公司在不同阶段的发展过程和成就,但并非基于真实事件。实际的Amplitronix LLC公司的发展历程可能有所不同,这些故事仅为虚构示例,供您参考。

问答坊 | AI 解惑

在没有单片机的情况下,只有仿真调试器,能否用Keil uVision3通过仿真调试器进行仿真呢?

在没有单片机的情况下,只有仿真调试器,能否用Keil uVision3通过仿真调试器进行仿真呢?如果不能的话,在没有单片机的情况下怎样才能编程仿真呢?欢迎大家给予小弟点指点,谢谢了!…

查看全部问答>

在WinCE 上, 如果ARM CPU 已经内置了CPU 控制器, 在平台上实现USB 功能,需要哪些步骤?

在WinCE 上, 如果ARM CPU 已经内置了CPU 控制器, 在平台上实现USB 功能,需要哪些步骤? 如果CPU 原厂的BSP 已经支持了USB 功能, 我们还需要哪些步骤?…

查看全部问答>

wince 5.0 使用 imaging COM组件 画png图片 内存泄露

BOOL ImageFromIDResource(UINT nID, LPCTSTR sTR, IImage** pIImage) {         HRSRC hRsrc = ::FindResource (hInstRes,MAKEINTRESOURCE(nID),sTR); // type         if (!hRsrc)     &n ...…

查看全部问答>

STM32 1602液晶程序无显示!求高手!

程序如下,急需高手指点!为什么程序下载到1602上无任何显示? //LCD #define   LOW_RS()    GPIOD->BRR =GPIO_Pin_6#define   LOW_RW()    GPIOD->BRR =GPIO_Pin_5#define   L ...…

查看全部问答>

求助

[i=s] 本帖最后由 paulhyde 于 2014-9-15 08:55 编辑 [/i]请问如何准备电子大赛控制类  …

查看全部问答>

IAR软件怎么查看语句运行时间

想在IAR软件中查看从这句运行到制定一句的时间,请问如何做啊??谢谢各位大神了…

查看全部问答>

机房环境温湿度综合控制系统方案

JCJ560 智能综合环境监测系统 一、产品简介: JCJ560智能综合环境监测系统是九纯健科技给合数据通讯技术、微型电脑控制技术、手机短信技术、互联网技术、传感器测量技术、自动化监测软件开发技术等多学科先进技术 ...…

查看全部问答>

回调函数精炼总结

函数f在调用函数f1的时候,实际上调用的是f2, 这个f2我们称它为一个回调函数。因此,回调既非什么高深的语法,也不是什么高明的算法,只是一种有别于直接调用的一种调用方式。这么做的目的不过是为了整个程序的结构更加清晰明了、可读性更强!…

查看全部问答>

运算放大器是否可以用来做比较器吗?

运算放大器是否可以用来做比较器吗?…

查看全部问答>