
#define RS _23_3//_pd3
#define RW _23_2//_pd2 #define RW _23_2//_pd2
#define E _23_1//_pd1
#define pb1 _1d_1//_pb1
#define pb3 _1d_3//_pb3
#define pd0 _23_0
#define LCD _pc
/
延时n毫秒程序
/
void mydelay(ulong n)
{
uchar x;
while(n--)
{
x=15;
while(x--);
}
}
/
Function name: write_cmd
Descriptions: 向lcd输入指令
/
void write_cmd(unsigned char cmd)
{
RS=0; //写指令模式
RW=0;
E=1;
_pc = cmd;
mydelay(2);
E=0;
mydelay(2);
}
/
Function name: write_data
Descriptions: 写入数据
/
void write_data(unsigned char data)
{
RS = 1;
RW = 0;
E = 1;
_pc = data;
mydelay(2);
E = 0;
mydelay(2);
}
/
Function name: write_string
Descriptions: 写入字符串
/
void write_string(unsigned char s)
{
while(s != '\0') //'\0'为字符串结束标志
{
write_data(s);
s++;
}
}
/
Function name: set_display_place
Descriptions: 设置字符的显示位置
/
void set_display_place(unsigned char line,unsigned char column)
{
unsigned char address;
if(line == 1)
{
address = 0x80 + column;
}
else if(line == 2)
{
address = 0x90 + column;
}
else if(line == 3)
{
address = 0x88 + column;
}
else if(line == 4)
{
address = 0x98 + column;
}
write_cmd(address);
}
/
液晶模块初始化
/
void lcd_init(void)
{
mydelay(15);
write_cmd(0x38);//功能设置,一次送8位数据,基本指令集
mydelay(5);
write_cmd(0x38);//功能设置,一次送8位数据,基本指令集
mydelay(5);
write_cmd(0x38);//功能设置,一次送8位数据,基本指令集
write_cmd(0x38);//功能设置,一次送8位数据,基本指令集
write_cmd(0x01);//0000,0001 清DDRAM
write_cmd(0x06);//02
write_cmd(0x0C);//0000,1100 整体显示,游标off,游标位置off
}
/
Function name: 将字符写到指定的位置
Descriptions: 将字符显示在lcd的特定位置
/
void write_data_lcd(uchar line,uchar column,uchar data)
{
set_display_place(line,column);
write_data(data);
mydelay(10);
}
/
Function name: 将字符串写到指定的位置
Descriptions: 将字符串显示在lcd的特定位置
/
void write_string_lcd(unsigned char line,unsigned char column,unsigned char string)
{
set_display_place(line,column);
write_string(string);
mydelay(10);
}
/
显示长整型数据
/
void crti(uchar line,uchar column,ulong data)
{
uchar dhi;
uchar dli;
uchar ddi;
uchar dei;
ulong datah;
ulong datal;
dli=column%2;
column/=2;
set_display_place(line,column);
if (dli==1)
{
datal=0x20;
write_data(datal);
}
datah=data;
dhi=0;
if (datah>=10)
{
do
{
datah/=10;
dhi++;
}while(datah>=10);
datah=data;
ddi=dhi;
for (dli=0;dli<dhi;dli++)
{
datal=1;
for (dei=0;dei<ddi;dei++)
{
datal=10;
}
datah=data/datal;
data=data%datal;
datah+=0x30;
write_data(datah);
ddi--;
}
data+=0x30;
write_data(data);
}
else
{
data=data+0x30;
write_data(data);
}
}
/
显示浮点数
/
void crt_float(uchar line,uchar column,ulong data)
{
uchar line1;
uchar column1;
uchar dhi;
ulong data1;
dhi=0;
data1=data;
if (data1>=10)
{
do
{
data1/=10;
dhi++;
}while(data1>=10);
column1=column-dhi;
line1=line;
data1=data;
crti(line1,column1,data1);
}
else
{
line1=line;
column1=column;
data1=data;
crti(line1,column1,data1);
}
}
这是12864的,看看有没有参考价值,其实只需改
void set_display_place(unsigned char line,unsigned char column)即可
#include <reg51h>
#define uint unsigned int
#define uchar unsigned char
#define BLKN 2 //列锁存器数
sbit G = P1^7; //P17为显示允许控制信号端口
sbit RCLK = P2^0; //P20为输出锁存器时钟信号端
sbit SCLR = P2^1; //P21为移位寄存器清○端
void delay(uint); //延时函数
uchar data display[32]; //显示缓存
uchar code BMP[][32]={{16,0,16,0,37,248,36,64,120,64,8,64,16,64,32,64,124,64,0,64,0,64,12,64,112,64,3,252,0,0,0,0},
{16,0,19,240,32,16,41,240,120,16,19,252,32,64,122,72,1,80,0,224,25,80,102,76,0,64,1,192,0,0,0,0},
{4,64,4,64,63,248,4,64,127,252,1,0,31,240,17,16,31,240,17,16,31,240,8,32,16,16,32,8,0,0,0,0}}; //字模表'红‘’绿‘‘黄’
void main()
{
register uchar i,j;
SCON=0x00; //串口工作模式0:移位寄存器方式
TMOD=0x01; //定时器T0工作方式1:16位方式
P1=0x3f; //P1端口初值:允许接收、锁存、显示
TR0=1; //启动定时器T0
ET0=1; //允许定时器T0中断
EA=1; //开启总中断;
while(1)
{
delay(2000);
for(j=0;j<3;j++)
{
for(i=0;i<32;i++)
{
display[i]=~BMP[j][i];
if (i%2) delay(100);
}
delay(10000);
}
}
}
void delay(uint x)
{
register uchar i,j;
for (i=x;i>0;i--)
for (j=120;j>0;j--);
}
void leddisplay(void) interrupt 1 using 1
{
register uchar i, j=BLKN;
TH0 =(65536-100)/256; //设定显示屏刷新率每秒60帧
TL0 =(65536-100)%256;
i = P1; //读取当前显示的行号
i = ++i & 0x0f; //行号加1,屏蔽高4位
while(j)
{
j--;
SBUF = display[iBLKN + j]; //送显示数据
while (!TI);
TI = 0;
} //完成一行数据的发送
G = 1; //消隐(关闭显示)
P1 &= 0xf0; //行号端口清○
RCLK = 1; //显示数据打入输出锁存器
P1 |= i; //写入行号
RCLK = 0; //锁存显示数据
G = 0; //打开显示
}
xx equ 30h
YY EQU 40H
org 0000h
start:MOV YY,#00
mov a,#00h
mov xx,#128
mov p0,a
anl p2,#00h
mov dptr,#0100h
mov 20h,#00h
l1:mov r1,#3h
l2:mov r6,#16
mov r4,#00h
mov r0,20h
l3:mov a,r4
mov p1,a
inc r4
mov a,r0
movc a,@a+dptr
mov r7,a
mov p0,a
inc r0
mov a,r0
movc a,@a+dptr
mov r7,a
mov p2,a
inc r0
mov r3,#02
d2:mov r5,#0f8h
djnz r5,$
djnz r3,d2
mov a,#00h
mov p0,a
anl p2,#00h
djnz r6,l3
djnz r1,l2
inc dpl
INC DPL
mov a,r7
cjne a,#1bh,bb
jmp start
bb:djnz xx,l1
INC YY
MOV A,YY
N1:CJNE A,#1,N2
LJMP DD
N2:cjne a,#2,N3
LJMP EE
N3:CJNE A,#3,START
LJMP FF
DD:
mov dpl,#0
mov dptr,#0F00H
mov xx,#128
mov a,r7
mov 20h,#00h
cjne a,#1bh,l1
EE:
MOV DPL,#0
MOV DPTR,#1D00H
MOV XX,#128
MOV A,R7
MOV 20H,#00H
CJNE A,#1BH,L1
ff:MOV DPL,#0
MOV DPTR,#2B00H
MOV XX,#128
MOV A,R7
MOV 20H,#00H
CJNE A,#1BH,L1
jmp start
org 0100h
DB 000H,001H,01fH,010H,010H,010H,03fH,010H,008H,002H,018H,030H,024H,042H,001H,000H;
DB 030H,0f8H,000H,080H,080H,080H,0fcH,080H,080H,090H,088H,08cH,086H,084H,000H,000H;;江",0
DB 040H,000H,04FH,0FEH,048H,014H,048H,024H,048H,044H,07FH,084H,048H,004H,048H,004H;
DB 048H,004H,07FH,084H,048H,044H,048H,044H,048H,044H,04FH,0FEH,040H,000H,000H,000H;;西",1
DB 000H,080H,008H,080H,009H,000H,011H,000H,061H,0FFH,003H,052H,003H,052H,0FDH,052H;
DB 005H,052H,009H,052H,009H,052H,051H,052H,021H,0FFH,018H,000H,000H,000H,000H,000H;;省",2
DB 000H,000H,000H,000H,07FH,0FFH,049H,002H,049H,004H,049H,008H,049H,000H,04FH,000H;
DB 049H,0C0H,049H,030H,049H,008H,079H,004H,001H,002H,001H,00FH,000H,000H,000H,000H;;民",3
DB 020H,004H,027H,0FCH,020H,008H,020H,008H,03FH,0F2H,022H,012H,022H,0A2H,023H,004H;
DB 00DH,004H,0F8H,0C8H,048H,030H,008H,0C8H,00FH,004H,008H,006H,008H,004H,000H,000H;;政",4
DB 002H,000H,00CH,040H,008H,040H,048H,040H,03AH,040H,02AH,040H,00AH,042H,08AH,041H;
DB 07AH,0FEH,02BH,040H,00AH,040H,018H,040H,0EAH,040H,04CH,040H,008H,040H,000H,000H;;学",5
DB 010H,040H,011H,080H,016H,000H,0FFH,0FFH,014H,000H,012H,002H,000H,042H,011H,084H;
DB 016H,064H,090H,018H,070H,018H,010H,064H,015H,086H,012H,003H,011H,002H,000H,000H;;校",6
DB 000H,000H,000H,000H,01FH,0F0H,012H,020H,012H,020H,012H,020H,012H,020H,0FFH,0FCH;
DB 012H,022H,012H,022H,012H,022H,012H,022H,01FH,0F2H,000H,002H,000H,00EH,000H,000H;;电",7
DB 000H,080H,000H,080H,040H,080H,040H,080H,040H,080H,040H,082H,040H,081H,047H,0FEH;
DB 048H,080H,050H,080H,060H,080H,040H,080H,000H,080H,001H,080H,000H,080H,000H,000H;;子",8
ORG 0F00H
DB 000H,080H,000H,080H,040H,080H,040H,080H,040H,080H,040H,082H,040H,081H,047H,0FEH;
DB 048H,080H,050H,080H,060H,080H,040H,080H,000H,080H,001H,080H,000H,080H,000H,000H;;子",8
DB 001H,000H,002H,000H,00CH,000H,03FH,0FEH,0E0H,000H,050H,000H,015H,07EH,015H,044H;
DB 095H,044H,075H,044H,055H,044H,015H,044H,015H,07EH,010H,000H,010H,000H,000H,000H;;信",9
DB 000H,000H,000H,004H,000H,01CH,03FH,080H,02AH,0BCH,02AH,082H,06AH,082H,0AAH,0A2H;
DB 02AH,09AH,02AH,082H,02AH,082H,03FH,08EH,000H,000H,000H,010H,000H,00CH,000H,000H;;息",10
DB 010H,080H,010H,082H,011H,001H,0FFH,0FEH,012H,000H,014H,002H,000H,002H,013H,004H;
DB 012H,0C8H,012H,030H,0FEH,030H,012H,048H,013H,084H,012H,006H,010H,004H,000H,000H;;技",11
DB 008H,008H,008H,008H,008H,010H,008H,020H,008H,040H,009H,080H,00AH,000H,0FFH,0FEH;
DB 00AH,000H,009H,000H,048H,080H,028H,060H,008H,030H,008H,018H,008H,010H,000H,000H;;术",12
DB 004H,000H,004H,000H,024H,000H,024H,000H,025H,080H,026H,080H,03CH,090H,0E4H,088H;
DB 024H,094H,024H,0A2H,025H,0C0H,024H,080H,024H,000H,004H,000H,004H,000H,000H,000H;;专",13
DB 000H,004H,008H,004H,006H,004H,001H,0C4H,000H,084H,0FFH,0FCH,000H,004H,000H,004H;
DB 000H,004H,0FFH,0FCH,000H,044H,001H,084H,006H,004H,01CH,00CH,008H,004H,000H,000H;;业",14
DB 000H,010H,000H,010H,01FH,0D0H,014H,090H,094H,090H,074H,090H,054H,090H,01FH,0FFH
DB 014H,090H,034H,090H,0D4H,090H,054H,090H,01FH,0D0H,000H,010H,000H,010H,000H,000H;单",0
DB 000H,001H,000H,002H,000H,00CH,07FH,0F0H,008H,080H,008H,080H,008H,080H,008H,080H
DB 008H,080H,0F8H,080H,008H,080H,008H,0FFH,008H,000H,018H,000H,008H,000H,000H,000H;片",1
ORG 1D00H
DB 000H,001H,000H,002H,000H,00CH,07FH,0F0H,008H,080H,008H,080H,008H,080H,008H,080H
DB 008H,080H,0F8H,080H,008H,080H,008H,0FFH,008H,000H,018H,000H,008H,000H,000H,000H;片",1
DB 010H,020H,010H,0C0H,013H,000H,0FFH,0FFH,012H,000H,011H,082H,010H,00CH,000H,030H
DB 07FH,0C0H,040H,000H,040H,000H,040H,000H,07FH,0FCH,000H,002H,000H,01EH,000H,000H;机",2
DB 000H,004H,040H,004H,041H,004H,041H,004H,041H,004H,041H,004H,041H,004H,07FH,0FCH
DB 041H,004H,041H,004H,041H,004H,041H,004H,0C3H,004H,041H,00CH,000H,004H,000H,000H;王",0
DB 008H,080H,011H,000H,023H,0FEH,0E6H,000H,05CH,004H,008H,004H,043H,0FCH,040H,004H
DB 040H,004H,040H,004H,07FH,0FCH,041H,004H,041H,004H,041H,004H,041H,004H,000H,000H;征",1
DB 002H,010H,022H,010H,022H,020H,022H,020H,022H,040H,022H,07CH,0FEH,092H,023H,012H
DB 023H,022H,022H,022H,026H,042H,02AH,042H,072H,002H,022H,00EH,002H,000H,000H,000H;老",2
DB 000H,002H,03FH,0E4H,000H,008H,000H,070H,0FFH,080H,000H,000H,04FH,0F0H,048H,000H
DB 048H,000H,048H,000H,07FH,0FFH,048H,000H,048H,020H,048H,010H,04FH,0E0H,000H,00H;师",3
DB 001H,000H,002H,000H,00CH,000H,03FH,0FEH,0E1H,000H,041H,004H,021H,004H,021H,004H
DB 021H,004H,03FH,0FCH,041H,004H,041H,004H,041H,004H,041H,004H,001H,004H,000H,000H;任",0
DB 008H,090H,028H,090H,029H,012H,02BH,011H,0FDH,07EH,029H,0A0H,039H,022H,028H,022H
DB 00AH,004H,01FH,004H,0F0H,0C8H,010H,030H,011H,0CCH,01EH,003H,010H,002H,000H,000H;教",1
DB 008H,000H,008H,002H,008H,004H,008H,008H,008H,030H,089H,0C0H,048H,080H,078H,000H
DB 029H,000H,008H,080H,008H,040H,008H,030H,008H,01EH,008H,00CH,008H,000H,000H,000H;六",
ORG 2B00H
DB 008H,000H,008H,002H,008H,004H,008H,008H,008H,030H,089H,0C0H,048H,080H,078H,000H
DB 029H,000H,008H,080H,008H,040H,008H,030H,008H,01EH,008H,00CH,008H,000H,000H,000H;六",2
DB 002H,020H,004H,020H,008H,020H,030H,020H,0C7H,0E0H,044H,020H,044H,020H,044H,020H
DB 07FH,0FFH,044H,020H,044H,020H,044H,020H,044H,020H,040H,020H,000H,020H,000H,01BH;年",3
end
在许多c程序设计中,要用到汉字进行提示或人机交互,而现行的turbo c集成开发环境不是汉化的,如何编制能显示汉字的c程序呢?
下面的方法可以帮你在西文环境下显示汉字。这种方法是调用中文汉字库进行汉字显示。国家标准规定:汉字库分94个区,每个区有94个汉字(以位作区别),每个汉字在汉字库中有确定的区和位编号,这就是汉字的区位码。每个汉字在库中是以点阵字模形式存储的,一般采用16×16点阵(32字节)、24×24点阵(72字节),每个点用一个二进制位(0或1)表示,对应在屏幕上显示出来,就是相应的汉字。
由于在中文环境下,输入的是汉字的内码,我们必须将之转换成区位码,算出偏移量,从字库中找到对应的汉字,将其字模显示即可。
内码转换成区位码方法如下:
qh=c1-0xa0 wh=c2-0xa0
其区位码就是:
qw=qh*0xff+wh
该汉字在字库中离起点的位置是:
offset=(94*(qh-1)+(wh-1))*32l
程序例:
#include 〈graphicsh〉
#include 〈stdioh〉
#include 〈fcntlh〉
#include 〈ioh〉
#include 〈stdlibh〉
#include 〈conioh〉
#define row 1 //纵坐标放大倍数
#define col 2 //横坐标放大倍数
void main()
{
int x,y;
char *s=″汉字显示程序″;
file *fp;
char buffer[32]; //buffer用来存储一个汉字
register m,n,i,j,k;
unsigned char qh,wh;
unsigned long offset;
int gd=detect,gm; //图形屏幕初始化
initgraph(&gd,&gm,″ ″);
if ((fp=fopen(″hzk16″,″rb″))==null)
//打开汉字库,该字库可以在ucdos中找到
{ printf(″can't open haz16,please add it″);
getch(); closegraph(); exit(0);
}
x=20; y=100; //显示位置设置
while(*s)
{ qh=*(s)-0xa0; //汉字区位码
wh=*(s+1)-0xa0;
offset=(94*(qh-1)+(wh-1))*32l; //计算该汉字在字库中偏移量
fseek(fp,offset,seek_set);
fread(buffer,32,1,fp); //取出汉字32字节的点阵字模存入buffer中(一个汉字)
for (i=0;i〈16;i++) //将32位字节的点阵按位在屏幕上打印出来(1:打印,0:不打印),显示汉字
for(n=0;n〈row;n++)
for(j=0;j〈2;j++)
for(k=0;k〈8;k++)
for(m=0;m〈col;m++)
if (((buffer[i*2+j]〉〉(7-k))&0x1)!=null)
putpixel(x+8*j*col+k*col+m,y+i*row+n,green);
s+=2; //因为一个汉字内码占用两个字节,所以s必须加2
x+=30;
}
getch();
closegraph();
}
上述程序在turbo c 20编译系统下运行成功,它可以将汉字放大显示,读者可以将它改成函数用在您的程序中显示汉字。
参考gugu99的博客
给你个方向
先搞清楚数码管是如何显示指定数据的,再看看矩阵键盘的电路和处理方式,结合两者的理解就可以处理你的LED矩阵显示啦。至于程序怎么写,如果搞清楚我说的数码管和矩阵键盘的知识和范例都不会,那给你程序也没什么意义啦。
这个就看你怎么应用了。假设你想用它来显示一个汉字。你想一下,88的点阵只可以显示简单的汉字,复杂的汉字就只能用更大的点阵了。更大的点阵表现力就更加丰富了。功能不多加叙述。
至于程序,其实还要结合电路。即点阵中有许多发光二极管,行列谁对应高,低电平,要清楚。单片机肯定带不动这个电路,故还有驱动电路。结合以上信息才能定义管脚。
以上就是关于谁可以发个用HT66F50控制16x16LED点阵的C语言程序,扩展芯片是4块74HC595芯片。全部的内容,包括:谁可以发个用HT66F50控制16x16LED点阵的C语言程序,扩展芯片是4块74HC595芯片。、单片机C语言红绿灯程序,要求:数码管显示时间倒计时、16*16LED点阵显示模块显示红绿黄灯、、如何设计16X16点阵汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)