编程,单片机C51编程

作者&投稿:法胜 (若有异议请与网页底部的电邮联系)
给51单片机编程用的C51与C语言有什么区别?~

其实区别不是太多。C语言中的所有运算符,在C51中都可以用。但是C51也有特有运算符,如sbit,还有特殊的寄存器名等可以直接写。C语言中没有相关的内容。

一位共阳数码管接在P0口,为静态显示。P3口接有8个独立式按键,按键为K1~K8,按键8个按键中的任意一个,数码管则显示出按键编号。仿真图如下,这是按下K6时显示6。

单片机c语言下lcd多级菜单的一种实现方法可通过“向上”、“向下”、“回退”、“确认”4 个键或遥控器来实现对菜单的选择。具体功能:“向上”键:在本层菜单的项目中向上移动进行选择;“向下”键:在本层菜单的项目中向下移动进行选择;“回退”键:取消本层的菜单设置,返回上层菜单;“确认”键:确认本层的菜单设置,进入下级菜单。可根据用户在菜单中的选择项对测点进行某些设置,或者进行某些特殊的显示,例如对某个测点的实时曲线显示等。程序设计根据需求,首先建立一个结构,并定义一个结构变量kbdtabst ruct 。结构变量就是把多个不同类型的变量结合在一起形成的一个组合型变量,构成一个结构的各个变量称为结构元素。该结构中共有6 个结构元素,分别是5 个字符型和1 个指针变量,5 个字符型变量分别为当前及各个按键的索引号,也就是*作的状态号,最后1 个指针变量指向需执行函数。这样就可以做一个结构数组,在结构数组里为每一个菜单项编制一个单独的函数,并根据菜单的嵌套顺序排好本菜单项的索引号,以及本级菜单项的上、下卷动的索引号和上、下级菜单的索引号。具体程序如下所述:typedef st ruct{ uchar  keystateindex ;   / / 当前状态索引号 uchar  keydnstate ;   / / 按下“向下”键时转向的状态索引号 uchar  keyupstate ;   / / 按下“向上”键时转向的状态索引号 uchar  keycrstate ;   / / 按下“回车”键时转向的状态索引号 uchar  keybackstate ;   / / 按下“退回”键时转向的状态索引号 void  ( 3 currentoperate) ( ) ;   / / 当前状态应该执行的功能*作}  kbdtabst ruct ;# define size - of keybd - menu 55   / / 菜单总长度kbdtabst ruct code keytab[ size - of - keybd - menu ] ={ {0 ,0 ,0 ,1 ,0 , ( 3 mainjob1) } , {1 ,7 ,2 ,8 ,0 , ( 3 dsp point) } ,   / / 第一层 {2 ,1 ,3 ,8 ,0 , ( 3 dspcurve) ) ,   / / 第一层</p><p> {3 ,2 ,4 ,36 ,0 , ( 3 dsp kout) } ,   / / 第一层 {4 ,3 ,5 ,50 ,0 , ( 3 disclosedown) } ,   / / 第一层程序设计根据需求,首先建立一个结构,并定义一个结构变量kbdtabst ruct 。结构变量就是把多个不同类型的变量结合在一起形成的一个组合型变量,构成一个结构的各个变量称为结构元素。该结构中共有6 个结构元素,分别是5 个字符型和1 个指针变量,5 个字符型变量分别为当前及各个按键的索引号,也就是*作的状态号,最后1 个指针变量指向需执行函数。这样就可以做一个结构数组,在结构数组里为每一个菜单项编制一个单独的函数,并根据菜单的嵌套顺序排好本菜单项的索引号,以及本级菜单项的上、下卷动的索引号和上、下级菜单的索引号。具体程序如下所述:typedef st ruct{ uchar  keystateindex ;   / / 当前状态索引号 uchar  keydnstate ;   / / 按下“向下”键时转向的状态索引号 uchar  keyupstate ;   / / 按下“向上”键时转向的状态索引号 uchar  keycrstate ;   / / 按下“回车”键时转向的状态索引号 uchar  keybackstate ;   / / 按下“退回”键时转向的状态索引号 void  ( 3 currentoperate) ( ) ;   / / 当前状态应该执行的功能*作}  kbdtabst ruct ;# define size - of keybd - menu 55   / / 菜单总长度kbdtabst ruct code keytab[ size - of - keybd - menu ] ={ {0 ,0 ,0 ,1 ,0 , ( 3 mainjob1) } , {1 ,7 ,2 ,8 ,0 , ( 3 dsp point) } ,   / / 第一层 {2 ,1 ,3 ,8 ,0 , ( 3 dspcurve) ) ,   / / 第一层</p><p> {3 ,2 ,4 ,36 ,0 , ( 3 dsp kout) } ,   / / 第一层 {4 ,3 ,5 ,50 ,0 , ( 3 disclosedown) } ,   / / 第一层下面是一个具体的例子:unsigned char tempin,tempout,temprun;unsigned char Key_Value();unsigned char Change_Value(unsigned char);void Delay_1(unsigned int m);void Run_Satus();char * MainMenuTitle = "主菜单";const char * MainMenuItems[] = {"1.室内温度调整","2.室外温度调整","3.运行时间调整","4.ESC退出",};TMenu MainMenu;void OnSelectMainMenu(int index){if (index < 0 || index >= sizeof(MainMenuItems) / sizeof(char *)) return;ClearScreen();switch (index) {case 0:TextOut(0, 1, "室内调整开始 ");tempin=Change_Value(tempin);TextOut(0, 1, "室内调整完毕");Delay_1(300000);break;case 1:TextOut(0, 1, "室外调整开始 ");tempout=Change_Value(tempout);TextOut(0, 1, "室外调整完毕");Delay_1(300000);break;case 2:TextOut(0, 1, "运行时间调整开始");tempout=Change_Value(temprun);TextOut(0, 1, "运行时间完毕");Delay_1(300000);break;case 3:break;}ClearScreen();}UINT OnMainMenuOk(void * arg){TMenu * pMenu = (TMenu *)arg;if (pMenu) OnSelectMainMenu(pMenu->Current);return 0;}UINT OnMainMenuCancel(void * arg){TMenu * pMenu = (TMenu *)arg;if (pMenu) {CloseMenu(pMenu);}return 0;}UINT OnMainMenuOtherKey(void * arg){TMenu * pMenu = (TMenu *)arg;char key;if (pMenu) {key = pMenu->EventArg;OnSelectMainMenu(key - '1');DrawMenu(pMenu);}return 0;}void InitMenu(){InitializeMenu(&MainMenu, MainMenuTitle, MainMenuItems, sizeof(MainMenuItems) / sizeof(char *));MainMenu.OnOk = OnMainMenuOk;MainMenu.OnOtherKey = OnMainMenuOtherKey;MainMenu.OnCancel = OnMainMenuCancel;}unsigned char Key_Value(){unsigned char KeyTemp;KeyTemp=GetKey();switch(KeyTemp){case(VK_ESCAPE):return(0);break;case(VK_ENTER):return(1);break;case(VK_UP):return(2);break;case(VK_DOWN):return(3);break;}}unsigned char Change_Value(unsigned char temp2){unsigned char temp3;temp3=temp2;while((Key_Value()!=0)&&(Key_Value()!=1)){if(Key_Value()==2)temp3++;else if(Key_Value()==3)temp3--;ClearLine(1);TextOut(0, 1, "调整状态%d", temp3);}if(Key_Value()==1)return(temp3);else if(Key_Value()==0) return(temp2);}void Delay_1(unsigned int m){while(m--);}void Run_Satus(){ClearScreen();TextOut(0, 0, "室内温度%d",tempin);TextOut(0, 1, "室外温度%d",tempout);TextOut(0, 2, "运行时间%d",temprun);TextOut(0, 3, "ENTER 进入调整");}void tmain(){tempin=30;tempout=30;temprun=30;unsigned char key;InitMenu();while(1){Run_Satus();key=GetKey();if(key==VK_ENTER)ShowMenu(&MainMenu);}}


51单片机的编程问题?
C51语句: P0_0 = 1;P0_0声明为sbit,因此编译成:setb 80h,这将把位地址空间的0x80地址的bit的值置1。这个位正是P0口的bit0,执行后,P0.0将输出高阻态。而P0.1-.7不会变化。2:C51为什么要嵌套汇编 51单片机一个显著优点就是指令执行时间固定,因此可以适应时序要求严格的场合。例如符合...

c51单片机用什么编写程序?keil还是c++?
size (code + ro data + rw data)6388 (6.24kb)=== 补充:⊙﹏⊙,你用的那个版本的keil c51,我的keil 3,keil 4在菜单edit都有configuration...选项.你现在用的至少也得是keil 3吧!

单片机 c51程序
includE <rEg52.h> \/\/\/52的库 includE <intrins.h> \/\/\/ sfr isp_wdt = 0xE1;sfr isp_data = 0xE2;sfr isp_addrh = 0xE3;sfr isp_addrl = 0xE4;sfr isp_cmd = 0xE5;sfr isp_trig = 0xE6;sfr isp_contr = 0xE7;\/\/\/ unsignEd char iic_n...

急求最简单的单片机4人抢答器c51程序
先来个汇编的程序,P1接一个共阳极数码管,P0低4位接4个抢答按键,主持人复位采用单片机复位按钮实现。ORG 0000H START: MOV A,P0 ORL A,#0F0H CJNE A,#0FFH,PL0 SJMP START PL0: LCALL DELAY MOV A,P0 ORL A,#0F0H CJNE A,#0FFH,PL1 SJMP START PL1: JNB ACC.0,K1 JNB AC...

单片机高级语言C51应用程序设计图书目录
本书详细介绍了单片机高级语言C51应用程序设计的内容,分为多个章节,旨在帮助读者深入理解并掌握C51编程技术。第1章,'C语言基础',涵盖了C语言的特点、程序结构,以及标识符和关键字。接着介绍了单片机C51程序的编译、连接与调试过程。第二章,'C51程序设计基础',深入讲解了数据类型、常量、变量存储、...

单片机C51源程序。谁能看懂的吗?帮我分析一下,明天就要交报告啦。谢谢...
void display() \/\/显示函数 { u8 i;for(i=0;i<6;i++){ P2=wela[i];\/\/选择哪个数码管有效 P0=dula[disbuff[i]];\/\/数码管显示的数字 delay(3);} } void Change() \/\/转换函数 { disbuff[0]=FerTmp\/100000;\/\/提取fertmp的十万位的数字 disbuff[1]=(FerTmp%100000)\/10000;\/\/提取...

c51单片机编程
1;MOV DPTR,#2230HMOVX A,@DPTR2;MOV R0,30HMOV DPTR,#2000HLOOP: MOV A,@R0 MOVX @DPTR,A INC R0 INC DPTR CJNE R0,#41H,LOOP RET3;MOV DPTR,#1000HMOV R0,#30HLOOP: MOVX A,@DPTR MOV @R0,A INC R0 INC DPTR CJNE R0,#51H,LOOP R...

单片机用C51和汇编语言写程序的区别
仅仅是语言本身的区别,一个是用C语言,一个是用汇编语言 若干年前汇编相对于C语言有性能上的优势,因为每条指令与机器马直接对应,做优化容易控制些。但如今编译器越来越强大,优化的结果也越来越好,汇编这点优势就不明显了。而C语言相对于汇编来说它的优势就在于它是高级语言,语法上更平易近人,也...

C51单片机编程语句解释
很简单,0xaa是16进制,转换成二进制就是10101010,而输出0的IO口等就亮,从右往左依次是P1.0,P1.2,P1.4,P1.6口为0,所以点亮D0,D2,D4,D6 0x55转换成二进制是01010101

单片机 8*8点阵C51程序
一.基于51的点阵屏显示:(1)点亮第一个8*8点阵:1.首先在Proteus下选择我们需要的元件,AT89C51、74LS138、MATRIX-8*8-GREEN(在这里使用绿色的点阵)。在Proteus 6.9中8*8的点阵总共有四种颜色,分别为MATRIX-8*8-GREEN,MATRIX-8*8-BLUE,MATRIX-8*8-ORANGE ,MATRIX-8*8-RED。在这里请牢记...

三都水族自治县15023576018: 单片机c语言编程(关于单片机c语言编程的基本详情介绍)
马辉速碧: 1、单片机c语言编程是基于C语言的单片机编程.2、单片机的C语言采用C51编译器(简称C51).3、由C51产生的目标代码短,运行速度高,存储空间小,符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用.

三都水族自治县15023576018: C51单片机编程的步骤 -
马辉速碧: C语言在keil上编译成.HEX文件在用stc_isp软件下载到单片机里面去!谢谢采纳

三都水族自治县15023576018: 单片机C51编程
马辉速碧: 51是单片机的一种.基于不同内核(CPU)的单片机,其指令系统不同,所以编译器不同.C51将C编译成51汇编,而单片机C语言应该通指,不过国内常把51与单片机等同起来.

三都水族自治县15023576018: c语言编程c51单片机
马辉速碧: #include <reg51.h>#define uchar unsigned char#define uint unsigned intmain(){ uint xdata *xp;//定义指向片外RAM的指针 uint data *p;//定义指向片内RAM的指针 uchar i;//定义循环变量 xp=0x100;//指向片外RAM的100H单元 p=0x30;//指向片内RAM的30H单元 for(i=0;i<10;i++){//循环10次 *p=*xp;//将片外RAM单元中的内容传送给片内RAM单元 xp++;//指向下一个片外RAM单元地址p++;//指向下一个片内RAM单元地址}}

三都水族自治县15023576018: c51单片机流水灯编程 -
马辉速碧: 注意共地 #include <REGX51.H> #define uchar unsigned char #define uint unsigned intunsigned long cnt1 = 0; uint htime=1000; uint ltime=1000; uchar X = 0x01;void delay_ms(unsigned long timer_cnt) { cnt1=0; while(cnt1 < timer_cnt); }void ...

三都水族自治县15023576018: 什么是c51模块化编程
马辉速碧: 就是基于c51单片机的编程.

三都水族自治县15023576018: C51单片机的程序 -
马辉速碧: 加一个while循环就可以了. while(1){.............. 检测到有效输入置标志flag=1; if(flag==1)break; }

三都水族自治县15023576018: 用c++怎么编写51单片机程序,可以这么样编写吗???? -
马辉速碧: 相信很多初学者都有同样的疑问,也有同样的希望.就是用C++语言来写单片机程序的源代码.现在我来解释一下单片机的源代码程序几乎没有人用C++来写的. 1. 假设一下你现在用C++写完了一个程序代码.那么你要让单片机认识必须要编译...

三都水族自治县15023576018: 单片机C51编程(C语言):实现学号的显示(学号是10位数字) -
马辉速碧: 你用什么驱动数码管呢?不同的驱动,程序写法不同.如果直接用I/O口驱动,8位数码管就这样写: wei=位选 duan=段选//断码表uchar code shuzi[12]={0xc0,0xf9,0xa4,0xb0,0x99,//0,1,2,3,4,0x92,0x82,0xf8,0x80,0x90,//5,6,7,8,9,0x00,0xff}; ...

三都水族自治县15023576018: 请问单片机C语言编程与单片机C51编程的区别是什么?
马辉速碧: 我觉得这两个只是一种说法的问题,深究没有什么意义,我们一般说C51也就是说在51单片机上用C语言进行开发,而单片机C语言可能更强调的开发语言是C语言而不是汇编语言. 如果你是初学者学习单片开发的话,并且有一定的C语言基础的话,建议从郭天祥老师的单片视频教程开始学习,有空可以去我的网站 http://www.fujiangyun.com 看看,相互讨论讨论.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网