标题:
CT107D单片机数码管动态显示
[打印本页]
作者:
冷暖或自知
时间:
2017-11-22 17:13
标题:
CT107D单片机数码管动态显示
#include "reg52.h" //定义51单片机特殊功能寄存器
#include "intrins.h"
// 0 1 2 3 4 5 6 7 8 9
code unsigned char duantab[] = { 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
code unsigned char weitab[] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
unsigned char i= 0;
void display(void);
sbit a = P2^5;
sbit b = P2^6;
sbit c = P2^7;
void wei_clock();
void duan_clock();
//主函数
void main(void)
{
TMOD = 0x01; //配置定时器工作模式
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256;
EA = 1;
ET0 = 1; //打开定时器中断
TR0 = 1; //启动定时器
while(1)
{
}
}
void display()
{
//先送位选
P0 = weitab[ i];
wei_clock();
//再送段选
P0 = duantab[ i];
duan_clock();
i++;
if(i>=8)
i=0;
}
//定时器中断服务函数
void isr_timer_0(void) interrupt 1 //默认中断优先级 1
{
TH0 = (65536-2000)/256;
TL0 = (65536-2000)%256; //定时器重载
display(); //2ms执行一次
}
//段码锁存 Y7C 1变为0
//即74HC138的Y7输出 0变为1
void duan_clock()
{
//74HC138 的Y7 为0
// a = 1;
// b = 1;
// c = 1;
P2 = 0xff; //1111 1111
_nop_();
_nop_();
//74HC138 的Y7 为1
// a = 0;
// b = 1;
// c = 0;
P2 = 0x5f; //0101 1111
}
//位码锁存 Y6C 1变为0
//即74HC138的Y6输出 0变为1
void wei_clock()
{
//74HC138 的Y6 为0
//a = 0;
//b = 1;
//c = 1;
P2 = 0xdf; //1101 1111
_nop_();
_nop_();
//74HC138 的Y6 为1
// a = 0;
// b = 1;
// c = 0;
P2 = 0x5f; //0101 1111
}
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1