ARM9嵌入式系统,用C语言编写7段LED数码管

Python016

ARM9嵌入式系统,用C语言编写7段LED数码管,第1张

//显示123456的程序,这只是整个程序片段

#include "led_ioctl.h"

int Led_123()

{

int led_fd,count

char ret[7] //数组ret[i] 存放送LED显示的数据

//【打开LED设备】

led_fd = open("/dev/led",O_RDWR)

if (led_fd <= 0){

printf("open led device error\n")

return 0

}//if

ret[6] = 0xcf//初始化数组数值为 6.

ret[5] = 0x4f//初始化数组数值为 5.

ret[4] = 0x53//初始化数组数值为 4.

ret[3] = 0x5d//初始化数组数值为 3.

ret[2] = 0x9d//初始化数组数值为 2.

ret[1] = 0x50//初始化数组数值为 1.

ioctl(led_fd,IOCTRL_LED_1)

count = write(led_fd,ret+1,1)

ioctl(led_fd,IOCTRL_LED_2)

count = write(led_fd,ret+2,1)

ioctl(led_fd,IOCTRL_LED_3)

count = write(led_fd,ret+3,1)

ioctl(led_fd,IOCTRL_LED_4)

count = write(led_fd,ret+4,1)

ioctl(led_fd,IOCTRL_LED_5)

count = write(led_fd,ret+5,1)

ioctl(led_fd,IOCTRL_LED_6)

count = write(led_fd,ret+6,1)

return 0

}

不一样,汇编主要是要了解CPU指令及用法。

我们常说的是PC机的x86汇编,指令是x86的复杂指令集。

arm汇编是arm的精简指令集,比x86容易学,程序格式倒是和x86汇编差不多。你下载一份arm的手册就可以了解了。

C语言ARM的和x86的差不多,除了对硬件寄存器操作不同,其它语法和流程都一样。

回答补充:

arm汇编程序每一行是指定arm core执行一条指令,每条指令都是硬件相关。

LDR R3, #1 用LDR指令将数值1放入R3寄存器准备参与运算

C语言与arm指令无关,只与逻辑运算有关,指定硬件地址的操作才与硬件相关;如果用arm编译器来编译,每行可能编译出1到多条arm指令。

i++ //变量 i 递增1

等效于

LDR R3,#1 用LDR指令将数值1放入R3寄存器准备参与运算

ADD R2, R2, R3 用ADD指令将R2、R3寄存器里的数值相加后放回R2寄存器

以上等效汇编的R2、R3寄存器只是为了举例,C语言不像汇编,不需要由程序员指定用哪个寄存器参与运算,编译器编译时会根据程序结构自动判断选择。

强调mcuos有错,“c语言被编译器编译的时候会最终解释为汇编语言的”,无论是c语言还是汇编语言,编译器编译后的结果是机器执行码,很多人因为汇编语言比较难懂及指令相关,所以以为它就是机器语言,其实它仍是人类设计的编写程序的语言,仍需要编译器编译成机器码才能执行,它只是比C语言更接近硬件而已。