不好意思各位,源代码是这样! #include<reg51.h> #include"DS18B20.h" #define uchar unsigned char #define uint unsigned int void delayms(uint xms); // 延时函数 void beep(); // 蜂鸣器响 void display(); //数码管显示计数 void key_scan(); // 键盘扫描 void timer_init(); // 中断初始化ˉ sbit key0 = P1^0; // 调试控制按键 sbit key1 = P1^1; // 增加控制 sbit key2 = P1^2; // 减小控制 sbit key3 = P1^3; // 功能待定 sbit buzzer = P1^4; // 蜂鸣器端口 uchar tab[]; uchar code w[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20}; //数码管位选 // 数码管段选 共阴 /* uchar code table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; */ //共阳数码管段码表 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x98,0x83,0xc6,0xa1,0x86,0x8e}; uchar count, set_place; // count 用于定时器1s中断 set_place 用于计算按键的次数 便于选择调节那部分时间 uchar second = 0, minute = 0, hour = 0; //初始化时间 void main() { timer_init(); for(; ;) { key_scan(); display(); } } void beep() { buzzer = 1; delayms(2); buzzer = 0; delayms(2); } // 键盘扫描函数 void key_scan() { if(key0 == 0) { delayms(5); if(key0 == 0) { set_place++; while(!key0); beep(); if(set_place == 1) //按下一次 则定时器中断 { TR0 = 0; } if(set_place == 4) // 按下两次 定时器从上次状态恢复工作 { set_place = 0; TR0 = 1; } } } if(set_place != 0) { if(key1 == 0) { delayms(5); if(key1 == 0) { while(!key1); // 按键释放 beep(); if(set_place == 1) { second++; if(second == 60) { second = 0; } } if(set_place == 2) { minute++; if(minute == 60) { minute = 0; } } if(set_place == 3) { hour++; if(hour == 24) { hour = 0; } } } } } if(set_place != 0) { if(key2 == 0) { delayms(5); if(key2 == 0) { while(!key2); // 按键释放 beep(); if(set_place == 1) { second--; if(second == -1) { second = 59; } } if(set_place == 2) { minute--; if(minute == -1) { minute = 59; } } if(set_place == 3) { hour--; if(hour == -1) { hour = 23; } } } } } } // 数码管显示时间 void display() { uchar j; P2 = 0x01; P0 = table[hour / 10]; j = 60; while(j--); P2 = 0x02; P0 = table[hour % 10]; j = 60; while(j--); P2 = 0x04; P0 = table[minute / 10]; j = 60; while(j--); P2 = 0x08; P0 = table[minute % 10]; j = 60; while(j--); P2 = 0x10; P0 = table[second / 10]; j = 60; while(j--); P2 = 0x20; P0 = table[second % 10]; j = 60; while(j--); } // 定时器初始化 void timer_init() { TMOD = 0x01; //定时器T0 工作方式1 TH0 = (65536 - 45872) / 256; // 装初值 50ms TL0 = (65536 - 45872) % 256; EA = 1; //开放总中断 ET0 = 1; //开启定时器中段 TR0 = 1; //开启定时器0 } // 50ms中断 void t0_timer() interrupt 1 { TH0 = (65536 - 45872) / 256; //装初值 此时晶振为11.0592MHz TL0 = (65536 - 45872) % 256; count++; if(count == 20) //1s 时间到 { count = 0; second++; if(second == 60) // 秒为60 清零 分进一 { second = 0; minute++; if(minute == 60) // 分为60 清零 时进一 { minute = 0; hour++; if(hour == 24) // 时为24清零 { hour =0; } } } } } void delayms(uint xms) //延时xms { uchar i, j; for(i = xms; i > 0; i--) // 改变xms的值 可以调节延时时间 for(j = 110; j > 0; j--); } |
cjjcjj1 发表于 2017-5-26 23:16 不好意思是这样! #include<reg51.h> #include"DS18B20.h" #define uchar unsigned char #define uint unsigned int void delayms(uint xms); // 延时函数 void beep(); // 蜂鸣器响 void display(); //数码管显示计数 void key_scan(); // 键盘扫描 void timer_init(); // 中断初始化ˉ sbit key0 = P1^0; // 调试控制按键 sbit key1 = P1^1; // 增加控制 sbit key2 = P1^2; // 减小控制 sbit key3 = P1^3; // 功能待定 sbit buzzer = P1^4; // 蜂鸣器端口 uchar tab[]; uchar code w[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20}; //数码管位选 // 数码管段选 共阴 /* uchar code table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; */ //共阳数码管段码表 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x98,0x83,0xc6,0xa1,0x86,0x8e}; uchar count, set_place; // count 用于定时器1s中断 set_place 用于计算按键的次数 便于选择调节那部分时间 uchar second = 0, minute = 0, hour = 0; //初始化时间 void main() { timer_init(); for(; ;) { key_scan(); display(); } } void beep() { buzzer = 1; delayms(2); buzzer = 0; delayms(2); } // 键盘扫描函数 void key_scan() { if(key0 == 0) { delayms(5); if(key0 == 0) { set_place++; while(!key0); beep(); if(set_place == 1) //按下一次 则定时器中断 { TR0 = 0; } if(set_place == 4) // 按下两次 定时器从上次状态恢复工作 { set_place = 0; TR0 = 1; } } } if(set_place != 0) { if(key1 == 0) { delayms(5); if(key1 == 0) { while(!key1); // 按键释放 beep(); if(set_place == 1) { second++; if(second == 60) { second = 0; } } if(set_place == 2) { minute++; if(minute == 60) { minute = 0; } } if(set_place == 3) { hour++; if(hour == 24) { hour = 0; } } } } } if(set_place != 0) { if(key2 == 0) { delayms(5); if(key2 == 0) { while(!key2); // 按键释放 beep(); if(set_place == 1) { second--; if(second == -1) { second = 59; } } if(set_place == 2) { minute--; if(minute == -1) { minute = 59; } } if(set_place == 3) { hour--; if(hour == -1) { hour = 23; } } } } } } // 数码管显示时间 void display() { uchar j; P2 = 0x01; P0 = table[hour / 10]; j = 60; while(j--); P2 = 0x02; P0 = table[hour % 10]; j = 60; while(j--); P2 = 0x04; P0 = table[minute / 10]; j = 60; while(j--); P2 = 0x08; P0 = table[minute % 10]; j = 60; while(j--); P2 = 0x10; P0 = table[second / 10]; j = 60; while(j--); P2 = 0x20; P0 = table[second % 10]; j = 60; while(j--); } // 定时器初始化 void timer_init() { TMOD = 0x01; //定时器T0 工作方式1 TH0 = (65536 - 45872) / 256; // 装初值 50ms TL0 = (65536 - 45872) % 256; EA = 1; //开放总中断 ET0 = 1; //开启定时器中段 TR0 = 1; //开启定时器0 } // 50ms中断 void t0_timer() interrupt 1 { TH0 = (65536 - 45872) / 256; //装初值 此时晶振为11.0592MHz TL0 = (65536 - 45872) % 256; count++; if(count == 20) //1s 时间到 { count = 0; second++; if(second == 60) // 秒为60 清零 分进一 { second = 0; minute++; if(minute == 60) // 分为60 清零 时进一 { minute = 0; hour++; if(hour == 24) // 时为24清零 { hour =0; } } } } } void delayms(uint xms) //延时xms { uchar i, j; for(i = xms; i > 0; i--) // 改变xms的值 可以调节延时时间 for(j = 110; j > 0; j--); } |
不倒翁.WZT 发表于 2017-5-26 16:54 不好意思是这样! #include<reg51.h> #include"DS18B20.h" #define uchar unsigned char #define uint unsigned int void delayms(uint xms); // 延时函数 void beep(); // 蜂鸣器响 void display(); //数码管显示计数 void key_scan(); // 键盘扫描 void timer_init(); // 中断初始化ˉ sbit key0 = P1^0; // 调试控制按键 sbit key1 = P1^1; // 增加控制 sbit key2 = P1^2; // 减小控制 sbit key3 = P1^3; // 功能待定 sbit buzzer = P1^4; // 蜂鸣器端口 uchar tab[]; uchar code w[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20}; //数码管位选 // 数码管段选 共阴 /* uchar code table[17]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07, 0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71}; */ //共阳数码管段码表 uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x98,0x83,0xc6,0xa1,0x86,0x8e}; uchar count, set_place; // count 用于定时器1s中断 set_place 用于计算按键的次数 便于选择调节那部分时间 uchar second = 0, minute = 0, hour = 0; //初始化时间 void main() { timer_init(); for(; ;) { key_scan(); display(); } } void beep() { buzzer = 1; delayms(2); buzzer = 0; delayms(2); } // 键盘扫描函数 void key_scan() { if(key0 == 0) { delayms(5); if(key0 == 0) { set_place++; while(!key0); beep(); if(set_place == 1) //按下一次 则定时器中断 { TR0 = 0; } if(set_place == 4) // 按下两次 定时器从上次状态恢复工作 { set_place = 0; TR0 = 1; } } } if(set_place != 0) { if(key1 == 0) { delayms(5); if(key1 == 0) { while(!key1); // 按键释放 beep(); if(set_place == 1) { second++; if(second == 60) { second = 0; } } if(set_place == 2) { minute++; if(minute == 60) { minute = 0; } } if(set_place == 3) { hour++; if(hour == 24) { hour = 0; } } } } } if(set_place != 0) { if(key2 == 0) { delayms(5); if(key2 == 0) { while(!key2); // 按键释放 beep(); if(set_place == 1) { second--; if(second == -1) { second = 59; } } if(set_place == 2) { minute--; if(minute == -1) { minute = 59; } } if(set_place == 3) { hour--; if(hour == -1) { hour = 23; } } } } } } // 数码管显示时间 void display() { uchar j; P2 = 0x01; P0 = table[hour / 10]; j = 60; while(j--); P2 = 0x02; P0 = table[hour % 10]; j = 60; while(j--); P2 = 0x04; P0 = table[minute / 10]; j = 60; while(j--); P2 = 0x08; P0 = table[minute % 10]; j = 60; while(j--); P2 = 0x10; P0 = table[second / 10]; j = 60; while(j--); P2 = 0x20; P0 = table[second % 10]; j = 60; while(j--); } // 定时器初始化 void timer_init() { TMOD = 0x01; //定时器T0 工作方式1 TH0 = (65536 - 45872) / 256; // 装初值 50ms TL0 = (65536 - 45872) % 256; EA = 1; //开放总中断 ET0 = 1; //开启定时器中段 TR0 = 1; //开启定时器0 } // 50ms中断 void t0_timer() interrupt 1 { TH0 = (65536 - 45872) / 256; //装初值 此时晶振为11.0592MHz TL0 = (65536 - 45872) % 256; count++; if(count == 20) //1s 时间到 { count = 0; second++; if(second == 60) // 秒为60 清零 分进一 { second = 0; minute++; if(minute == 60) // 分为60 清零 时进一 { minute = 0; hour++; if(hour == 24) // 时为24清零 { hour =0; } } } } } void delayms(uint xms) //延时xms { uchar i, j; for(i = xms; i > 0; i--) // 改变xms的值 可以调节延时时间 for(j = 110; j > 0; j--); } |
你的软件设定还有问题,注解部分还是乱码,解决方法:点击Edit、点击Colors&Fonts、点击8051:Editor C Files、右侧列表中点击Text、将右侧选项Use Color in Comments前勾选去掉,再试试,正确了在进行编程,否则别人看不懂你做了些什么,就不会帮你修改程序。 |