#include <stdio.h>
#include <fcntl.h>
//设置fd和fd1的初始值为-1
static int fd = -1
static int fd1 = -1
//定义数码管显示0-9所对应的段码
unsigned char seg7table[16] = {
/* 0 1 2 3 4 5 6 7*/
0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,
/* 8 9 AB C D E F*/
0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,
}
//定义数码管显示所对应的位选码
unsigned char led[16] = {0x00,0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01}
int main()
{
int i=0
fd=open("/dev/cpldled",O_RDWR)//打开文件cpldled
if(fd<0) /裂顷/如果打开不成功禅渣,则提示Can't open,然后返回-1,成功则提示open Ok
{
printf("Can't open\n")
return -1
}
else
{
printf("open OK %x\n", fd)
}
fd1=open("/dev/seg",O_RDWR)
if(fd1<0)
{
printf("Can't open\n")
return -1
}
else
{
printf("open OK %x\n", fd1)
}
while(1)
{
//以下就是实现0-9的显示。
for(i=1i<9i++)
{
ioctl(fd1, 0, seg7table[i]) //把seg7table[]数肆袭陆组中的送逐个送到端口
ioctl(fd, 1,led[i])//把位选码依次送到端口
sleep(1)//延时
}
}
close(fd) //关闭文件
close(fd1)
return 0
}
void Delay1000us() { unsigned char i, j//延时等等1毫秒i = 2j = 239//下面需要做双咐握重循环,其中外循环2次,内循环239次
do{
while(--j)//每次内循环做一次减法和一次判断
} while(--i)//每次外循环做一次减法和一次判断
}
正如函数名写明的大体上可以认为,在当前的时钟频率下,经过衡橘庆测试,做上述这么多次的运算(执行语句次数)会耗时伍皮1毫秒。
CLK EQU P1.0定义端口P1.0在该程序中用CLK表示HEIPING:MOV R0,#40 r0=40 BLACK子程序入口参数
LCALL BLACK 调用BLACK
LP: MOV R6,#0 r6=0
MOV R3,#16 r3=16决定BEGIN子程序执行次数
MOV A,#0 a=0
BEGIN: MOV DPTR,#MyZiKu dptr=MYZIKU(首地址)
MOVCA,@A+DPTR a=欲显示字符的字形码
LCALL SHOW 调用SHOW程序(显示)
LCALL DELAY 调用DELAY程序(延时)
INC R6 r6加1
MOV A,R6 a=r6
DJNZR3,BEGIN r3减1不为0转移到BEGIN
BEGIN这一段程序的作用是在LED上每隔DELAY程序设定的时间按顺序显示0~F 循环16次
LJMPLP 转移到LP执行
延时程序铅敬 r0 r1 r2决定延时时间
DELAY: MOV R0,#0FFH r0=255
DLP:MOV R1,#0FFH r1=255
DLP1: MOV R2,#04H r2=4
DJNZR2,$ r2减1不为0仍在该行再次执行
DJNZR1,DLP1 r1减1不为0转到DLP1
DJNZR0,DLP r0减1不为0转到DLP
RET 退出
显示程序 该程序将循环8次显示一个字符
SHOW: MOV R0,#8 r0=8
SLP:CLR CLK P1.0输出低电平
RRC A 将存放在A中欲显示的字符码右移一位(最低位存入C)
MOV A_B,C A_B(未见到你程序中定义 应是个端口)=C
SETBCLK P1.0输出高电平
DJNZR0,SLP r0减1不为0转到SLP 继续输出字形码
RET
该程序循环40次 P1.0输出40个芦竖脉冲 同时端口A_B持续输出低电平
BLACK: CLR CLK P1.0输出低电平
CLR A_B A_B(未见到你程序中定义 应是个端口)输出低电槐哗慎平
SETBCLK P1.0输出高电平
DJNZR0,BLACK r0减1不为0转到BLACK
RET
0~F的字形码
MYZIKU:
DB 77H,06H,0B3H,97H,0C6H"0,1,2,3,4"
DB 0D5H,0F5H,07H,0F7H,0D7H "5,6,7,8,9"
DB 0E7H,0F4H,71H,0B6H,0F1H,0E1H "A,B,C,D,E,F"
0101 0000 1289 1488 R4H5 Q533
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)