51单片机C语言秒表程序报错误和警告(程序如下)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51单片机C语言秒表程序报错误和警告(程序如下)相关的知识,希望对你有一定的参考价值。

说明 pb1按键接int0,使秒表暂停;pb2按键接int1,清零秒表时间,timer0做1s的定时器,timer1做七段数码管的扫描程序。程序如下:
#include<reg51.h>
#define SET P2 //选择点亮数码管口
#define SEG P0 // 七段数码管输出口
#define count_T0 50000 //T0计数次数
#define TH_M1 (65636-count_T0)/256 //T0模式1高八位
#define TL_M1 (65636-count_T0)%256 //T0模式1高八位
#define count_T1 25 //T1计数次数
#define TH_M2 (256-count_T1) // T1计数高八位
#define TL_M2 (256-count_T1) // T1计数低八位
void debounce(void)

unsigned char code TAB[10]=0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; //0~9编码
char disp[2]=0x3f,0x3f; //初始化为0
int choic[2]=0x00,0x01;
int second=0,k=0;
int count0=0;
int count1=0;
sbit Pb0=P3^2; //开始.停止按钮
sbit Pb1=P3^3; //清零按钮
main() //主程序开始
SET=0x01;
P3=0xff;
IE=0x8f; //启用T0,T1中断,int0和int1中断
//IP=0x02; //T0具有最高的优先级
TCON=0x00; //int0,int1低电平动作
TMOD=0021; //设置T0的计数模式为模式1,T1计数模式为2
TH0=TH_M1; TL0=TL_M1; //T0装载数据
TR0=1; //启动T0
TH1=TH_M2; TL1=TL_M2; //T1装载数据
TR1=1; //启动T1

while(1);


void int0_pause(void) interrupt 0 //Pb0中断程序
debounce(); //去抖动
TR0=~TR0;
while(Pb0==0); //等待按键松开


void int_timer0(void) interrupt 1
int i=0;
TH0=TH_M1; //赋值高八位
TL0=TL_M1; //赋值第八位

if(++count0==20) //延迟1秒
count0=0;
second ++;
if(second==60)
second=0;
disp[0]=TAB[second/10];
disp[1]=TAB[second%10];


void int1_reset(void) interrupt 2
debounce(); //去抖动
second=0;
SEG=0x3f;
while(Pb1==0); //等待按键松开


void int_timer1(void) interrupt 3
int j=0;
TH1=TH_M2; TL1=TL_M2; //T1装载数据

if(++count1==5)
count1=0;
if(disp[0]==0x3f)

SET=choic[1];
SEG=disp[1];

else
SEG=disp[k];
SET=choic[k];

k++;
if(k==2)
k=0;


void debounce(void) //去抖动程序
int i;
for(i=0;i<2400;i++); //连续计数2400次,延迟约20ms

keil 3错误和警告如下
60S STOPWATCH.C(12): warning C258: 'TAB': mspace on parameter ignored
60S STOPWATCH.C(12): error C244: 'TAB': can't initialize, bad type or class
60s stopwatch.c - 1 Error(s), 1 Warning(s).
这是什么问题呢?我改了半天也有的时候错误还越来越多,不改就这两个,请高手指点,不胜感激!

参考技术A 你把这个second的数据类型改成unsigned char second;
本身second最大计数直到60 定义成int太浪费空间
你本身定的数据TAB[]是unsigned char 类型的 放进去int类型可能会报错
你试下
参考技术B void debounce(void)
最后要加分号;本回答被提问者采纳

基于51单片机的反向计时秒表protues仿真设计(源码+仿真+论文)

程序源码参考设计 +QQ214268650
本设计
仿真图proteus 7.8/protues 8.6
程序编译器:keil 4/keil 5
编程语言:C语言
编号S10108_3

功能说明:
该设计为99-0秒反向计时的秒表,能够通过数码管或液晶显示读秒,该系统主要包括单片机最小系统、显示单元、定时计数器设计。
系统要求启动秒表后,从99开始计时,计到0秒停止,中途可以通过按键控制暂停/继续读秒,复位后能够重新从99开始读秒。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上是关于51单片机C语言秒表程序报错误和警告(程序如下)的主要内容,如果未能解决你的问题,请参考以下文章

单片机秒表计时器c语言程序图 需要图和程序

基于51单片机的反向计时秒表protues仿真设计(源码+仿真+论文)

51单片机的精度0.01的秒表protues仿真设计_定时器(仿真+电路图+pcb+源码)

51单片机,使用keil软件,4字节加法或减法子程序

用定时器实现10s秒表的计时功能,精确到小数点后一位,即能够有0.1s显示,有开始,暂停,清零的功能(C语

基于51单片机的电子秒表