【数码管/定时器/中断】一个定时器控制数码管显示
来源:互联网 发布:分润系统源码 编辑:程序博客网 时间:2024/05/22 07:45
两种方式实现
/*用定时器以间隔500MS在6位数码管上
依次显示0、1、2、3….C、D、E、F,重复。*//*轮流在每一位数码管上显示*/
-----------------------------------------------------①---------------------------------------------------------------------
/*利用一个定时器实现数码管从左到右每位依次显示数字,且数字由0变到F再变到0,循环。*/#include<reg52.h>#define ui unsigned int#define uc unsigned charvoid init();sbit we=P2^7;sbit du=P2^6;/*数码管段码表*/uc code tabledu[]= //段码表{/*0 1 2 3*/0x3f,0x06,0x5b,0x4f,/*4 5 6 7*/0x66,0x6d,0x7d,0x07,/*8 9 A B*/0x7f,0x6f,0x77,0x7c,/*C D E F 不显示*/0x39,0x5e,0x79,0x71,0};/*数码管位码表*/uc code tablewe[]= //位码表(从高位到低位){0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };ui i;uc numdu=0;uc numwe=0;uc flag=0;void main(){init(); //初始化定时器0i=0;we=1;P0=tablewe[0]; //显示第一位数码管;we=0;du=1;P0=tabledu[0];du=0;while(1){if(i==20){i=0;numdu++;numwe++;if(numdu==16)numdu=0;if(numwe==8)numwe=0;we=1;P0=tablewe[numwe];we=0;du=1;P0=tabledu[numdu];du=0;TR0=1;} }}void init(){TMOD=0x01; //设置定时器0为工作方式1TH0=(65535-50000)/256; // "/"是求模运算 即能被几个整除TL0=(65535-50000)%256; // "%"是求余运算 即整除后剩余EA=1; //开总中断ET0=1; //开定时器0中断TR0=1; //启动定时器0}void time0()interrupt 1{TH0=(65535-50000)/256; // 再赋初值TL0=(65535-50000)%256; // i++;if(i==20)TR0=0;}-----------------------------------------------------②---------------------------------------------------------------------
/*用定时器以间隔500MS在6位数码管上依次显示0、1、2、3….C、D、E、F,重复。*//*轮流在每一位数码管上显示*/#include<reg52.h>#define ui unsigned int #define uc unsigned charsbit du=P2^6;sbit we=P2^7;uc numwe,numdu;uc flag=0;ui tt;uc code tabledu[]= //段码表{/*0 1 2 3*/0x3f,0x06,0x5b,0x4f,/*4 5 6 7*/0x66,0x6d,0x7d,0x07,/*8 9 A B*/0x7f,0x6f,0x77,0x7c,/*C D E F 不显示*/0x39,0x5e,0x79,0x71,0};uc code tablewe[]= //位码表(从高位到低位){0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f };void delay(ui z){ui x,y;for(x=z;x>0;x--)for(y=114;y>0;y--); }void init_timer0(){TMOD=0x01;TH0=(65536-46083)/256; //50msTL0=(65536-46083)%256; EA=1;ET0=1;TR0=1;}void display(){du=1;P0=tabledu[0]; du=0;while(1){we=1;if(numwe==8)numwe=0; P0=tablewe[numwe];we=0;if(flag){du=1;if(numdu==16)numdu=0;P0=tabledu[numdu]; du=0;flag=0;}}}void main(){init_timer0();display(); }void timer0() interrupt1{TH0=(65536-46083)/256; //50msTL0=(65536-46083)%256;tt++;if(tt==10){numwe++;numdu++;flag=1;tt=0;}}
0 0
- 【数码管/定时器/中断】一个定时器控制数码管显示
- 定时器控制数码管扫描显示
- 定时器数码管显示秒表
- 流水灯&数码管&定时器中断
- 定时器控制数码管2011.1.24
- 按键控制数码管0-99显示,十位不跳,用定时器T0中断
- lesson3~数码管的静态显示&定时器&中断的应用
- 数码管 定时器 去抖动
- 定时器和数码管
- 外中断(按键)控制数码管显示
- 定时器0控制LED的闪烁时间;计数器1来控制数码管的显示
- 51_定时器扫描矩阵键盘_数码管显示
- 定时器计时,并在数码管实时显示时间
- 按键控制数码管显示
- 按键控制数码管显示
- 使用单片机的定时器0和中断实现9到0的倒计时功能,并用数码管显示
- 中断+数码管
- 4.999计数器 数码管动态扫描(使用定时器)
- 孙云球(二分枚举)(AOJ 851)
- 程序员面试题:排序和查找的实现(JAVA版)
- Android 编译错误:unreachable statement
- PHP发送邮件
- 前缀++和后缀++
- 【数码管/定时器/中断】一个定时器控制数码管显示
- 判断序列是否为正确的出栈序列
- InSAR Processing Wiki
- 浅析TCP与UDP
- DeepLearning tutorial——CNN卷积神经网络应用于人脸识别(详细流程+代码实现)
- 用友 uap nc65开发编码树改为pk树方法
- JavaScript实现拖拽预览,AJAX小文件上传
- 1012. The Best Rank (25)[C语言实现]
- jsp之ajax的初次应用