#include <STC32G.H>
#include <INTRINS.H>
// 函数声明
void Delay10ms(void);
// 全局变量
signed int b;
unsigned int h, c;
unsigned int a[8]; // 用于存储a1到a8的值
unsigned char code number[] = {0XC0, 0XF9, 0XA4, 0XB0, 0X99, 0X92, 0X82, 0XF8, 0X80}; // 数码管显示的数字编码
// 10ms延时函数
void Delay10ms(void) //@24.000MHz
{
unsigned char i = 39, j = 230;
do {
while (--j);
} while (--i);
}
void main()
{
// 初始化端口模式寄存器,保留PxM1,删除PxM0
P0M1 = 0X00;
P4M1 = 0X00;
P6M1 = 0X00;
P7M1 = 0X00;
// 初始化P7端口
P7 = 0XEF;
while (1)
{
h++; // 计数器递增
unsigned char row = 0xFE; // 初始化行扫描值
// 扫描行
for (unsigned char i = 0; i < 4; i++)
{
P0 = row; // 设置行扫描值
// 检测按键状态
if (P06 == 0 && P07 == 1) a[h % 8] = i + 1; // 如果P06为0且P07为1,设置a的值为i+1
if (P06 == 1 && P07 == 0) a[h % 8] = i + 5; // 如果P06为1且P07为0,设置a的值为i+5
row = _crol_(row, 1); // 左移行扫描值
}
// 显示数字
for (b = h; b >= 2; b--)
{
P6 = number[a[(h - b) % 8]]; // 根据a数组的值设置P6端口的显示值
P7 = _cror_(0XEF, 1); // 右移P7端口的值
Delay10ms(); // 延时10ms
// 检测按键状态
if (P06 == 0 || P07 == 0) c = 1; // 如果P06或P07为0,设置c为1
if ((P06 == 1 && c == 1) || (P07 == 1 && c == 1)) { c = 0; b = -1; } // 如果P06或P07为1且c为1,重置c并退出循环
}
}
} 复制代码
错误在P7 = _cror_(0XEF, 1); // 右移P7端口的值
原因:缺少分号
你这个程序写的优点麻烦了,可以多利用以下for循环进行简化的