|
本帖最后由 幽水蓼蓝 于 2019-12-16 10:00 编辑
单片机仿真实习任务:
03 数码管类单片机系统
- /**************************************************************** *
- 90秒倒计时
- ***************************************************************/
- /* 11.0952M晶振*/
- #include<reg51.h>//头文件
- #include<intrins.h>//头文件
- /*数码管显示0-9*/
- unsigned int code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
- int time=90;//定时
- sbit k1=P3^2; //定义按键启动
- unsigned int aa,shi,ge; //定义变量
- /*********************************************************
- 子函数声明
- *********************************************************/
- void Daojishi();//倒计时
- void display(unsigned int shi,unsigned int ge);
- void Time_T0();
- void Int0Init();
- void xtimer0();
- void delay(unsigned char j);
- void delay0(unsigned int z);
- /*********************************************************
- 主函数
- *********************************************************/
- void main()
- {
- while(1)
- {
- Daojishi();
- }
- }
- void Daojishi()//倒计时
- {
- unsigned int temp;
- temp= time;//变量赋初值
- Time_T0();
- while(1)
- {
- if(aa==20)//定时20*50MS=1S
- {
- aa=0;//定时完成一次后清0
- temp--;//变量自增
- if(temp==4)//定时100S
- {
- temp=25;//变量清0
- break;
- }
- shi=temp%100/10;//显示十位
- ge=temp%10;//显示个位
- }
- display(ge,shi);
- }
- }
- /*******************************************************************************
- * 函 数 名 : display(unsigned int shi,unsigned int ge)
- * 函数功能 : 两位数码管显示子函数
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void display(unsigned int shi,unsigned int ge)
- {
- P0=0xfe;
- P2=table[shi];//显示十位
- delay0(5);
- P0=0xfd;
- P2=table[ge];//显示个位
- delay0(5);
- }
- /*******************************************************************************
- * 函 数 名 : Time_T0()
- * 函数功能 : 定时器0工作于方式1,设定
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void Time_T0()
- {
- TMOD=0x01;//定时器0工作于方式1
- TH0=0x4c;
- TL0=0x00;//定时器赋初值
- EA=1;//开外部中断
- ET0=1;//开定时中断
- TR0=1;//开定时器0
- }
- /*******************************************************************************
- * 函 数 名 : Int0Init()
- * 函数功能 : 设置外部中断0
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void Int0Init()
- {
- //设置INT0
- IT0=1;//跳变沿出发方式(下降沿)
- EX0=1;//打开INT0的中断允许。
- EA=1;//打开总中断
- }
- /*******************************************************************************
- * 函 数 名 : xtimer0() interrupt 1
- * 函数功能 : 定时中断子函数
- * 输 入 : 无
- * 输 出 : 无
- *******************************************************************************/
- void xtimer0() interrupt 1
- {
- TH0=0x4c;
- TL0=0x00;
- aa++;
- }
- /*********************************************************
- 延时子函数0.24ms
- *********************************************************/
- void delay0(unsigned int z)
- {
- unsigned int i,j;
- for(i=0;i<z;i++)
- for(j=0;j<110;j++);
- }
- /*********************************************************
- 500ms延时函数
- 晶振:11.0592MHz
- *********************************************************/
- void delay(unsigned char j)
- {
- unsigned char k;
- unsigned int i;
- for(;j>0;j--)
- {
- for(i=1250;i>0;i--)
- {
- for(k=180;k>0;k--);
- }
- }
- }
复制代码 |
|