标题:
这是定义的问题吗,用的c语言,怎么都改不对
[打印本页]
作者:
mrj_142378
时间:
2025-1-7 21:36
标题:
这是定义的问题吗,用的c语言,怎么都改不对
#include <reg51.h>
// 定义端口
sbit SNG = P2^0; // 南北绿灯
sbit SNY = P2^1; // 南北黄灯
sbit SNR = P2^2; // 南北红灯
sbit EWG = P2^3; // 东西绿灯
sbit EWY = P2^4; // 东西黄灯
sbit EWR = P2^5; // 东西红灯
// 数码管显示相关
uchar code SEG[4] = {0x01, 0x02, 0x04, 0x08}; // 数码管位选
uchar code distab[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 数码管显示0~9
uint timeG, timeY, timeR; // 各灯显示时间
uint state; // 状态标志
// 延时函数
void delay_ms(uint q)
{
uint i, j;
for (i = 0; i < q; i++)
for (j = 0; j < 110; j++);
}
// 定时器0初始化
void Timer0Init(void)
{
TMOD |= 0X01; // 定时器0模式1,16位定时器
TH0 = 0XFC; // 定时1ms
TL0 = 0X18;
EA = 1; // 开总中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // 启动定时器0
}
// 定时器0中断服务程序
void Timer0() interrupt 1
{
static uint count = 0; // 计数器,用于控制状态转换
TH0 = 0XFC; // 重装初值
TL0 = 0X18;
count++;
if (count >= 1000) // 每秒更新一次状态
{
count = 0;
switch (state)
{
case 0: // 南北绿灯,东西红灯
timeG--;
if (timeG == 0)
{
state = 1;
timeY = 3;
}
break;
case 1: // 南北黄灯闪烁,东西红灯
if (timeY > 0)
timeY--;
else
{
state = 2;
timeR = 90;
}
break;
case 2: // 南北红灯,东西绿灯
timeR--;
if (timeR == 0)
{
state = 3;
timeY = 3;
}
break;
case 3: // 南北红灯,东西黄灯闪烁
if (timeY > 0)
timeY--;
else
{
state = 0;
timeG = 20;
}
break;
}
}
// 数码管显示倒计时
uchar displayDigit[4] = {0xFF, 0xFF, 0xFF, 0xFF}; // 初始化为全灭
switch (state)
{
case 0:
displayDigit[0] = distab[timeG / 10];
displayDigit[1] = distab[timeG % 10];
break;
case 1:
displayDigit[0] = distab[timeY / 10];
displayDigit[1] = distab[timeY % 10];
break;
case 2:
displayDigit[0] = distab[timeR / 10];
displayDigit[1] = distab[timeR % 10];
break;
case 3:
displayDigit[0] = distab[timeR / 10];
displayDigit[1] = distab[timeR % 10];
break;
}
for (uchar i = 0; i < 4; i++)
{
P1 = SEG[i];
P0 = displayDigit[i];
delay_ms(1);
}
}
// 主函数
void main()
{
Timer0Init(); // 定时器初始化
timeG = 20; // 初始时间设置
state = 0; // 初始状态
while (1)
{
// 主循环可以为空,因为所有操作都在中断中完成
}
}
显示4.c(9): error C129: missing ';' before 'code'。
我搜到是没有定义就在开头加了
#define uchar unsigned char;
#define uint unsigned int;
结果显示4.c(109): error C202: 'P0': undefined identifier
作者:
WL0123
时间:
2025-1-8 06:48
改这样就可以通过编译
#include <reg51.h>
#define uchar unsigned char//;
#define uint unsigned int//;
// 定义端口
sbit SNG = P2^0; // 南北绿灯
sbit SNY = P2^1; // 南北黄灯
sbit SNR = P2^2; // 南北红灯
sbit EWG = P2^3; // 东西绿灯
sbit EWY = P2^4; // 东西黄灯
sbit EWR = P2^5; // 东西红灯
// 数码管显示相关
uchar code SEG[4] = {0x01, 0x02, 0x04, 0x08}; // 数码管位选
uchar code distab[10] = {0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90}; // 数码管显示0~9
uint timeG, timeY, timeR; // 各灯显示时间
uint state; // 状态标志
// 延时函数
void delay_ms(uint q)
{
uint i, j;
for (i = 0; i < q; i++)
for (j = 0; j < 110; j++);
}
// 定时器0初始化
void Timer0Init(void)
{
TMOD |= 0X01; // 定时器0模式1,16位定时器
TH0 = 0XFC; // 定时1ms
TL0 = 0X18;
EA = 1; // 开总中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // 启动定时器0
}
// 定时器0中断服务程序
void Timer0() interrupt 1
{
static uint count = 0; // 计数器,用于控制状态转换
uchar displayDigit[4] = {0xFF, 0xFF, 0xFF, 0xFF};
uchar i ;
TH0 = 0XFC; // 重装初值
TL0 = 0X18;
count++;
if (count >= 1000) // 每秒更新一次状态
{
count = 0;
switch (state)
{
case 0: // 南北绿灯,东西红灯
timeG--;
if (timeG == 0)
{
state = 1;
timeY = 3;
}
break;
case 1: // 南北黄灯闪烁,东西红灯
if (timeY > 0)
timeY--;
else
{
state = 2;
timeR = 90;
}
break;
case 2: // 南北红灯,东西绿灯
timeR--;
if (timeR == 0)
{
state = 3;
timeY = 3;
}
break;
case 3: // 南北红灯,东西黄灯闪烁
if (timeY > 0)
timeY--;
else
{
state = 0;
timeG = 20;
}
break;
}
}
// 数码管显示倒计时
// uchar displayDigit[4] = {0xFF, 0xFF, 0xFF, 0xFF}; // 初始化为全灭
switch (state)
{
case 0:
displayDigit[0] = distab[timeG / 10];
displayDigit[1] = distab[timeG % 10];
break;
case 1:
displayDigit[0] = distab[timeY / 10];
displayDigit[1] = distab[timeY % 10];
break;
case 2:
displayDigit[0] = distab[timeR / 10];
displayDigit[1] = distab[timeR % 10];
break;
case 3:
displayDigit[0] = distab[timeR / 10];
displayDigit[1] = distab[timeR % 10];
break;
}
// for (uchar i = 0; i < 4; i++)
for (i = 0; i < 4; i++)
{
P1 = SEG[i];
P0 = displayDigit[i];
delay_ms(1);
}
}
// 主函数
void main()
{
Timer0Init(); // 定时器初始化
timeG = 20; // 初始时间设置
state = 0; // 初始状态
while (1)
{
// 主循环可以为空,因为所有操作都在中断中完成
}
}
复制代码
作者:
xiaobendan001
时间:
2025-1-8 08:20
#define uchar unsigned char;后面不能加分号
作者:
declansang
时间:
2025-1-8 10:55
宏定义有问题
作者:
明日之星8
时间:
2025-1-8 12:04
define不是C语言关键字,它是编译器里面的,也不是一个语句,所以不能加分号。
类似的还有好几个,都要注意。
作者:
sadv
时间:
2025-1-9 15:49
#define uchar unsigned char//;
#define uint unsigned int//;
应该写成
typedef unsigned char uchar;
typedef unsigned uint uint;
这里是因为你后面的代码用了uchar,你是想把unsigned char类型重新命名为uchar,所以要用typedef
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1