51单片机—定时器显示时钟

来源:互联网 发布:阿里云 dnspod 编辑:程序博客网 时间:2024/05/29 18:51
#include <reg52.h>#define SEGPORT  P0sbit bit_select = P2^0;sbit seg_select = P2^1;unsigned char duanma[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};unsigned char weima[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};unsigned char TempData[8];unsigned char shi = 20,fen = 54,miao =55;void display(){  static unsigned char i = 0;SEGPORT = 0x0;  //消重影seg_select = 1;seg_select = 0;SEGPORT = 0xff;bit_select = 1;bit_select = 0;SEGPORT =  TempData[i];seg_select = 1;seg_select = 0;SEGPORT = weima[i];bit_select = 1;bit_select = 0;i++;if(8 == i){i = 0;}}void timer0_init(void){  EA = 1; //打开总中断  TMOD |= 0x01;    //TMOD = 0x01  TH0 = (65536 - 20000) / 256;  TL0 = (65536 - 20000) % 256; //设置定时器初值,1ms产生一次中断  ET0 = 1; //打开定时器中断  TR0 = 1; // 打开定时器,开始每隔1us加1}void timer1_init(void){  EA = 1; //打开总中断  TMOD |= 0x10; // TMOD = TMOD | 0x10 = 0x11  TH1 = (65536 - 2000) / 256;  TL1 = (65536 - 2000) % 256; //设置定时器初值,1ms产生一次中断  ET1 = 1; //打开定时器中断  TR1 = 1; // 打开定时器,开始每隔1us加1}void main(){timer0_init();timer1_init();while(1);}void timer0_isr() interrupt 1{ static unsigned char i = 0; TH0 = (65536 - 20000) / 256; TL0 = (65536 - 20000) % 256; //设置定时器初值,1ms产生一次中断 i++; if(50 == i) {    i = 0; miao++;if(60 == miao){    miao = 0;fen++;if(60 == fen){    fen = 0;shi++;if(24 == shi){shi = 0;}}} } TempData[0] = duanma[shi / 10]; TempData[1] = duanma[shi % 10]; TempData[2] = 0x40; TempData[3] = duanma[fen / 10]; TempData[4] = duanma[fen % 10]; TempData[5] = 0x40; TempData[6] = duanma[miao / 10]; TempData[7] = duanma[miao % 10];  }void timer1_isr() interrupt 3{TH1 = (65536 - 2000) / 256;TL1 = (65536 - 2000) % 256; //设置定时器初值,1ms产生一次中断display();}

0 0
原创粉丝点击