#include //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义sbit KEY=P1^4; //定义按键输入端口
sbit LED=P1^2; //定义led输出端口 sbit LED1=P1^1; sbit LED2=P1^0;
#define DataPort P0 //定义数据端口程序中遇到DataPort 则用P0 替换
sbit LATCH1=P2^2;//定义锁存使能端口段锁存 sbit LATCH2=P2^3;// 位锁存 unsigned 7f,0x6f};//
段
码
char unsigned
char
code code
dofly_DuanMa[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0xdofly_WeiMa[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//数码管码unsigned char TempData[8]; //存储显示值的全局变量
void Delay(unsigned int t); //函数声明
void Display(unsigned char FirstBit,unsigned char Num); void DelayUs2x(unsigned char t);//函数声明 void DelayMs(unsigned char t); void main (void)
{ unsigned int num=9999; unsigned int j; unsigned int a; unsigned int m; bit n1; bit n2; bit n3;
KEY=1; //按键输入端口电平置高 n1=1;
n2=KEY; a=0;
while (1) //主循环 { j++; m=!KEY;
if(j==10) //检测当前数值显示了一小段时间后 {j=0; a++; n3=KEY; if(a==100) {a=0; n1=!n1; LED1=n1; }
if((n3^n2)) {n2=n3;
if(n3==0) //上升沿 LED=!LED; else //下降沿 LED2=!LED2; }
if(num>00)//用于显示0~9999 {num=num-m; } else num=9999; }
TempData[0]=dofly_DuanMa[num/1000]; TempData[1]=dofly_DuanMa[(num%1000)/100]; TempData[2]=dofly_DuanMa[((num%1000)%100)/10];
TempData[3]=dofly_DuanMa[((num%1000)%100)%10]; Display(2,4); } }
void DelayUs2x(unsigned char t) { while(--t); }
void DelayMs(unsigned char t) { while(t--) { DelayUs2x(245); DelayUs2x(245); } }
void Delay(unsigned int t) { while(--t); }
void Display(unsigned char FirstBit,unsigned char Num) { unsigned char i;
for(i=0;i
DataPort=dofly_WeiMa[i+FirstBit]; //取位码 LATCH2=1; //位锁存 LATCH2=0;
DataPort=TempData[i]; //取显示数据,段码 LATCH1=1; //段锁存 LATCH1=0;
Delay(200); // 扫描间隙延时,时间太长会闪烁,太短会造成重影} }
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- sarr.cn 版权所有 赣ICP备2024042794号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务