高手帮我解答下单片机C语言每个语句的意思

供稿:hz-xin.com     日期:2024-05-18
高手帮我解答下单片机C语言每个语句的意思

数码管显示,定时器用于动态显示刷新而已。

#include
#define uchar unsigned char(宏定义 uchar ==unsigned char无符号字符变量)
#define uint unsigned int(无符号整数)
sbit key_s1=p3^0;
sbit key_s2=p3^1;
sbit key_s3=p3^2;
sbit key_s4=p3^3;
void delay(uint)(带参数的延时子程序)
{
uint i.j;(无符号整数)
for(i=0;i<k;i++)
{
for(j=0;j<121;j++)
{;}
}(FOR嵌套,使延时的时间可以更长)
}
void main(void)(没有什么意思这是格式)
{
delay(50);(延时,变量为50)
while(1)
{
if(!key_s1){p1=0xe7;}(!表示不,意思是KEY——SI不等于0)
else if (!key_s2){p1=0xdb;}
else if (!key_s3{p1=0xbd;}
else if (!key_s4{p1=0x7e;}
else{p1=0xc3;}
delay(5);
}

#include "reg51.h" //调用头文件reg51.h(内含有关单片机寄存器,端口的定义)
#define uchar unsigned char //宏定义 uchar表示unsigned char
#define uint unsigned int //宏定义 uint 表示unsigned int
uchar bai,shi,ge,n,temp=120; //定义 bai,shi,ge,n,temp 5个无符号字符型变量,初始值为120
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e}; //定义一个数组 LED数码管译码用的码表
void chushi() //定义初始化操作函数 (名称不太规范哦)
{
bai=temp/100; //bai 为temp除以100(取百位,因为temp是unsigned char数值范围0~255)
shi=temp/10%10; //shi 为temp处以10后再和10取余(先把十位搞到各位去,然后提取出个位)
ge=temp%10; //ge 为temp与10取余 (提取其个位)
P1=table[bai]; //查表法 把bai对应的段码送P1口
P2=table[shi]; //查表法 把shi对应的段码送P2口
P0=table[ge]; //查表法 把ge对应的段码送P0口
EA=1; //开总中断
ET0=1; //允许定时器中断
TMOD=0x01; //定时器1设置工作方式1
TH0=(65536-50000)/256; //设定定时器初始值高位
TL0=(65536-50000)%256; //设定定时器初始值低位 (12M晶振时约20ms)
TR0=1; //开始定时器

}
void zhongduan() interrupt 1 //中断服务程序 ,定时器中断
{
TH0=(65536-50000)/256; //设定定时器初始值高位 (定时器重新装载)
TL0=(65536-50000)%256; //设定定时器初始值低位 (12M晶振时约20ms)
n++; //计数值n自增
}
void xianshi(uchar bai,uchar shi,uchar ge) //数码管显示函数 (静态显示)
{
P1=table[bai]; //查表法 把bai对应的段码送P1口
P2=table[shi]; //查表法 把shi对应的段码送P2口
P0=table[ge]; //查表法 把ge对应的段码送P0口
}

void main() //主函数
{

chushi(); //掉用chushi函数进行初始化
while(1) //主循环
{
if(n==20) //判断n是否等于20 (50ms*20=1秒!)
{ //当n=20时
n=0; //n清零
temp--; //计数值temp自减
bai=temp/100; //bai 为temp除以100(取百位)
shi=temp/10%10; //shi 为temp处以10后再和10取余(取十位)
ge=temp%10; //ge 为temp与10取余 (取个位)
if(temp<=0) //如果temp 小于等于0 (好像不可能小于最多等于吧)
{
temp=120; //temp赋值为120(兄弟你是不是在作120秒篮球计时器那道题?)
bai=temp/100; //bai 为temp除以100(取百位)
shi=temp/10%10; //shi 为temp处以10后再和10取余(取十位)
ge=temp%10; //ge 为temp与10取余 (取个位)(又来了一遍,直接把if语句放在前面if(temp==255))temp=120不行么?)
P1=table[bai]; //查表法 把bai对应的段码送P1口
P2=table[shi]; //查表法 把shi对应的段码送P2口
P0=table[ge]; //查表法 把ge对应的段码送P0口
}

}
xianshi(bai,shi,ge); //调用显示函数显示数值
}
}

好吧我承认我是无聊,没心情看书。。。

一分没有,大段的简单程序,一看就是做毕设的。楼上两位还真有闲,居然真给回答。

#include "reg51.h"
#define uchar unsigned char
#define uint unsigned int
uchar bai,shi,ge,n,temp=120;

// 共阳数码管0~F的显示编码
uchar code table[]={0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,0x88,0x83,
0xc6,0xa1,0x86,0x8e};

void chushi()
{
// 把数分开,开始时temp为120
// 经过下面3条语句,后bai=1;shi=2;ge=0
bai=temp/100;
shi=temp/10%10;
ge=temp%10;

// 在数码管上显示百位
P1=table[bai];
// 在数码管上显示十位
P2=table[shi];
// 在数码管上显示个位
P0=table[ge];

// 开总中断
EA=1;
// 开定时器0中断
ET0=1;

// 设定定时器0为工作模式1
TMOD=0x01;

// 装计时初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
// 启动定时器0
TR0=1;

}
void zhongduan() interrupt 1
{
// 定时器计数溢出,重新装初值
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
n++;
}
void xianshi(uchar bai,uchar shi,uchar ge)
{
// 这个和上面一样,不用讲了
P1=table[bai];
P2=table[shi];
P0=table[ge];
}

void main()
{
// 后面的和上面的都差不多~~~~
chushi();
while(1)
{
if(n==20)
{
n=0;
temp--;
bai=temp/100;
shi=temp/10%10;
ge=temp%10;
if(temp<=0)
{
temp=120;
bai=temp/100;
shi=temp/10%10;
ge=temp%10;
P1=table[bai];
P2=table[shi];
P0=table[ge];
}

}
xianshi(bai,shi,ge);
}
}

请问单片机的C语言怎么编写啊?
答:单片机C语言编译错误:requires ANSI-style prototype,是编译过程错误造成的,解决方法如下:1、编程前保存文件,单击文件菜单,下拉菜单中选择保存按钮。2、输入文件名,文件类型选择为.c类型。3、然后开编辑,首先,定义头文件,头文件一般为stdio.h。4、接着,定义主函数,主函数名为main。5、然后,...

求高手解读此单片机C语言
答:{ //最好看着单片机的引脚图想,你就会明白啦。Ssecond=0;Msecond=0;millisecond=0;//while(!CLR);} } } }void Timer0Init(void){ TMOD=0x01; //定时器模式寄存器(既是你要选择定时器的哪个模式),//它的各个位(高到低):GATE C/T M1 M0 GATE C/T M1 M0 //(高四位是决定定时...

单片机是什么语言的c语言?.c语言有很多种是那种c语言想学下单片机
答:单片机使用C语言或汇编语言。C语言本身就是一个大类。ANSI C 或TURBO C都可以用。由于单片机对成本是敏感的,目前占统治地位的还是汇编语言,它是除了二进制机器码以上最低级的语言了,既然这么低级为什么还要用呢?很多高级的语言已经达到了可视化编程的水平为什么不用呢?原因很简单,就是单片机没有家用...

单片机菜鸟问个小白问题 求解释 C语言程序的。
答:全局变量数组,8个元素,分别表示8个数码管分别显示什么。主程序部分一个循环,首先检测什么按键被按下,按了就给这个全局数组赋值 检测完了之后是显示的代码。我只操作过2位数码管,8位光靠扫描不确定能不能显示得稳定(不闪烁),这个只能靠你了,反正是显示,显示的代码就是从我刚刚说的全局数组读...

单片机C语言程序分析
答://将取到数组第一位值,与0x01上。如果非零,crc就需要右移一位,再与0x8C异或。否则右移1位。每位数组值要做8次。while(len--) //表示要判断数组内len个值。或则说是取得数组内len长度的元素个数。return crc; //len个数组值都作完以后,将Crc返回。我想你需要了解一下 0x01的意义,0x...

单片机c语言程序,看不懂 ,求讲解
答:2)、显示ASCII码半宽字符时,往每个地址送入2个字节的ASCII编码,对应屏幕上的位置就会显示2个半宽字符,左边的为高字节字符,右边的为低字节字符。3)、显示汉字时,汉字编码的2个字节必须存储在同一地址空间中,不能分开放在2个地址存放,否则显示的就不是你想要的字符。每个字中的2个字节自动结合...

单片机c语言语程序解释?
答:程序运行时应该会先执行这一句:在这里赋值。else { val-=5;P0=val; //通过P0口给DA数据口赋值 if(val==0){ flag=0;beep=0;delayms(100);beep=1;} delayms(50);}

单片机的C语言程序,就讲解,我没看懂这是个什么意思
答:{ uchar cord_h,cord_l; //定义行、列值变量 P2=0x0f; //行输出全为0 cord_h=P2&0x0f; //读入列值 if(cord_h!=0x0f) //先检测有无按键按下 { delay(100); //去抖 if(cord_h!=0x0f){ cord_h=P2&0x0f; //读入列值 P2=cord_h|0xf0; //输出当...

一个关于单片机控制步进电机的C语言程序 想请高人帮我把每一步都注释...
答:C语言程序源代码 include <REGX51.H> // 51寄存器定义 include "intrins.h"define control P1 //P1_0:A相,P1_1:B相,P1_2:C相,P1_3:D相 define discode P0 //显示代码控制端口 define uchar unsigned char //定义无符号型变量 define uint unsigned int sbit en_dm=P3^0; //...

单片机C语言程序
答:define uint unsigned int//是宏定义,这样定义以后,在接下来的程序当中就能用uint 代替unsigned int了,void DelayMS(uint x)//是一个子函数,当调用时,就直接执行大括号里面的语句,while(x--)//是循环语句,当X--=0时,就不满足条件,跳出循环。它整个的功能就是一个延时,等待单片机处理完其它任务...