- #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
- }
复制代码
|