单片机数字钟程序Proteus仿真电路单片机解密
单片机源程序如下:
- 单片机解密//********************数字钟程序************************
- 单片机解密//程序:ex8-1.c
- 单片机解密//功能:数字钟程序
- #include "reg51.h"
- typedef unsigned int u16;
- typedef unsigned char u8;
- //********************位名称定义*************************
- sbit naodeng=P2^0; //闹钟开灯亮;否则灭
- sbit K1=P3^0; //切换模式(开关闹钟,调闹钟)
- sbit K2=P3^2; //调时
- sbit K3=P3^3; //调分
- sbit beep=P2^7; //蜂鸣器
- //********************函数声明***************************
- void shijian(); //计时时间显示
- void Timer0Init(); //定时器中断初始化函数
- void DigDisplay(); //LED动态显示扫描函数
- void alarm(); //闹铃报警处理
- void tiao_nao(); //闹钟时间设置
- void moshi(); //闹钟模式设置
- void delay(u16 i); //软件延时函数
- //********************全局变量定义***************************
- bit nao; //闹钟开关标志,nao=1闹钟开;nao=0闹钟关
- u8 a=0; //记录K1按下次数,第一次按下修改闹钟时间,第2次按下切换闹钟开关
- u8 display[]={0,0,0,0,0,0}; //显示缓冲区,对应六个数码管
- u8 ssec,sec,min,hour,nao_hour=0,nao_min=0; //10毫秒、秒、分、小时、闹钟小时、闹钟分钟
- //*************************延时函数****************************//
- //函数名:delay
- //函数功能:软件延时
- //形式参数:无符号整型变量i,0-65535
- //返回值:无
- void delay(u16 i)
- {
- while(i--);
- }
- //*************************定时器中断初始化函数****************************//
- //函数名:Timer0Init
- //函数功能:定时器T0定时中断,interrupt 1,开放两个外部中断
- //形式参数:无
- //返回值:无
- void Timer0Init()
- {
- TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
- EX0=1;
- IT0=1; //外部中断0采用下降沿触发
- PX0=1;
- EX1=1;
- IT1=0; //外部中断1采用低电平触发
- TH0=0Xd8; //给定时器赋初值,定时10ms,12MHz晶振频率
- TL0=0Xf0;
- ET0=1; //开放定时器0中断允许
- EA=1; //开放总中断
- TR0=1; //定时器开始计数
- }
- //**************************6位LED显示函数**************************/
- //函数名:DigDisplay
- //函数功能:6位LED动态显示,将显示缓冲区display中的6个数依次扫描显示一遍
- //形式参数:无
- //返回值:无
- void DigDisplay()
- {
- u8 i,j,m,temp;
- u8 led[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- //0-9的共阴极显示码
- temp=0x01;
- for(i=0;i<6;i++)
- {
- P1=0x00; //关显示
- j=display[i];
- P1=led[j]; //P1送段码
- P0=~temp; //P0对应端口低电平选位
- temp<<=1;
- for(m=0;m<100;m++); //每一位显示延时
- }
- }

芯片解密