当前位置:首页 > 单片机 > 单片机
[导读] #include#include#include//我自己写的库函数voidmain(void) {PORTB=0;PORTC=0;DDRB=255;DDRC=255;delay_ms(100);RESET=1;//复位delay_ms(100);ks0108cls();//清屏ks0108putchar(’A’);ks0108gotoxy(7

#include
#include
#include//我自己写的库函数
voidmain(void)

{
PORTB=0;
PORTC=0;
DDRB=255;
DDRC=255;
delay_ms(100);
RESET=1;//复位
delay_ms(100);

ks0108cls();//清屏
ks0108putchar(’A’);
ks0108gotoxy(70,2);
ks0108putchar(’#’);

while(1)
{
}
}

//文件的内容如下

//www.avrDIY.com

#defineRESETPORTB.2
#defineRSPORTB.3
#defineRWPORTB.4
#defineEPORTB.5
#defineCS1PORTB.6
#defineCS2PORTB.7
#defineDATAPORTC

#include

//由于ks0108没有读坐标指令,所以就用2个全局变量来记录坐标
unsignedcharks0108x,ks0108y;

flashunsignedchardata[]={
0x00,0x00,0x00,0x00,0x00,//sp
0x00,0x00,0x2f,0x00,0x00,//!
0x00,0x07,0x00,0x07,0x00,//"
0x14,0x7f,0x14,0x7f,0x14,//#
0x24,0x2a,0x7f,0x2a,0x12,//$
0x62,0x64,0x08,0x13,0x23,//%
0x36,0x49,0x55,0x22,0x50,//&
0x00,0x05,0x03,0x00,0x00,//’
0x00,0x1c,0x22,0x41,0x00,//(
0x00,0x41,0x22,0x1c,0x00,//)
0x14,0x08,0x3E,0x08,0x14,//*
0x08,0x08,0x3E,0x08,0x08,//+
0x00,0x00,0xA0,0x60,0x00,//,
0x08,0x08,0x08,0x08,0x08,//-
0x00,0x60,0x60,0x00,0x00,//.
0x20,0x10,0x08,0x04,0x02,///
0x3E,0x51,0x49,0x45,0x3E,//0
0x00,0x42,0x7F,0x40,0x00,//1
0x42,0x61,0x51,0x49,0x46,//2
0x21,0x41,0x45,0x4B,0x31,//3
0x18,0x14,0x12,0x7F,0x10,//4
0x27,0x45,0x45,0x45,0x39,//5
0x3C,0x4A,0x49,0x49,0x30,//6
0x01,0x71,0x09,0x05,0x03,//7
0x36,0x49,0x49,0x49,0x36,//8
0x06,0x49,0x49,0x29,0x1E,//9
0x00,0x36,0x36,0x00,0x00,//:
0x00,0x56,0x36,0x00,0x00,//;
0x08,0x14,0x22,0x41,0x00,//<
0x14,0x14,0x14,0x14,0x14,//=
0x00,0x41,0x22,0x14,0x08,//>
0x02,0x01,0x51,0x09,0x06,//?
0x32,0x49,0x59,0x51,0x3E,//@
0x7C,0x12,0x11,0x12,0x7C,//A
0x7F,0x49,0x49,0x49,0x36,//B
0x3E,0x41,0x41,0x41,0x22,//C
0x7F,0x41,0x41,0x22,0x1C,//D
0x7F,0x49,0x49,0x49,0x41,//E
0x7F,0x09,0x09,0x09,0x01,//F
0x3E,0x41,0x49,0x49,0x7A,//G
0x7F,0x08,0x08,0x08,0x7F,//H
0x00,0x41,0x7F,0x41,0x00,//I
0x20,0x40,0x41,0x3F,0x01,//J
0x7F,0x08,0x14,0x22,0x41,//K
0x7F,0x40,0x40,0x40,0x40,//L
0x7F,0x02,0x0C,0x02,0x7F,//M
0x7F,0x04,0x08,0x10,0x7F,//N
0x3E,0x41,0x41,0x41,0x3E,//O
0x7F,0x09,0x09,0x09,0x06,//P
0x3E,0x41,0x51,0x21,0x5E,//Q
0x7F,0x09,0x19,0x29,0x46,//R
0x46,0x49,0x49,0x49,0x31,//S
0x01,0x01,0x7F,0x01,0x01,//T
0x3F,0x40,0x40,0x40,0x3F,//U
0x1F,0x20,0x40,0x20,0x1F,//V
0x3F,0x40,0x38,0x40,0x3F,//W
0x63,0x14,0x08,0x14,0x63,//X
0x07,0x08,0x70,0x08,0x07,//Y
0x61,0x51,0x49,0x45,0x43,//Z
0x00,0x7F,0x41,0x41,0x00,//[
0x55,0x2A,0x55,0x2A,0x55,//55
0x00,0x41,0x41,0x7F,0x00,//]
0x04,0x02,0x01,0x02,0x04,//^
0x40,0x40,0x40,0x40,0x40,//_
0x00,0x01,0x02,0x04,0x00,//’
0x20,0x54,0x54,0x54,0x78,//a
0x7F,0x48,0x44,0x44,0x38,//b
0x38,0x44,0x44,0x44,0x20,//c
0x38,0x44,0x44,0x48,0x7F,//d
0x38,0x54,0x54,0x54,0x18,//e
0x08,0x7E,0x09,0x01,0x02,//f
0x18,0xA4,0xA4,0xA4,0x7C,//g
0x7F,0x08,0x04,0x04,0x78,//h
0x00,0x44,0x7D,0x40,0x00,//i
0x40,0x80,0x84,0x7D,0x00,//j
0x7F,0x10,0x28,0x44,0x00,//k
0x00,0x41,0x7F,0x40,0x00,//l
0x7C,0x04,0x18,0x04,0x78,//m
0x7C,0x08,0x04,0x04,0x78,//n
0x38,0x44,0x44,0x44,0x38,//o
0xFC,0x24,0x24,0x24,0x18,//p
0x18,0x24,0x24,0x18,0xFC,//q
0x7C,0x08,0x04,0x04,0x08,//r
0x48,0x54,0x54,0x54,0x20,//s
0x04,0x3F,0x44,0x40,0x20,//t
0x3C,0x40,0x40,0x20,0x7C,//u
0x1C,0x20,0x40,0x20,0x1C,//v
0x3C,0x40,0x30,0x40,0x3C,//w
0x44,0x28,0x10,0x28,0x44,//x
0x1C,0xA0,0xA0,0xA0,0x7C,//y
0x44,0x64,0x54,0x4C,0x44,//z
0x00,0x08,0x36,0x41,0x00,//{
0x00,0x00,0x7F,0x00,0x00,//|
0x00,0x41,0x36,0x08,0x00,//}
0x08,0x10,0x08,0x04,0x08//~
};

voidks0108rs0(unsignedcharrs)//写一个指令
{
E=1;RS=0;RW=0;
DATA=rs;
E=0;
delay_ms(1);//KS0108真是慢,写指令/数据都要适当延时
}

voidks0108putbyte(unsignedchardatas)//写一个字节
{
if(ks0108x>127)//显示到最后列时就退出本函数,并停止写显示数据
return;
if(ks0108x<64)//判断列地址,确定在左屏还是在右屏写数据
{CS1=1;CS2=0;}
else
{CS1=0;CS2=1;}
E=1;RS=1;RW=0;//写一个显示数据
DATA=datas;
E=0;
ks0108x++;//每写一个数据,列地址就要加1
delay_ms(1);
}

voidks0108putchar(unsignedcharASCII)//写一个字符(就是写6个数据)
{
unsignedchari;
unsignedintNo;
No=ASCII-32;//字模数据是由空格’’开始,空格的ASCII的值就是32
No=No*5;//每个字符的字模是5个字节
ks0108putbyte(0);//每个字符之间空一列
for(i=0;i<5;i++)//一个字符的字模是5个字节,就是5*8点阵
{
ks0108putbyte(data[No]);
No++;
}
}

voidks0108gotoxy(unsignedcharx,unsignedchary)//写列/行地址
{
if(x>127)x=0;//如果列地址超出范围就回到0列
if(y>7)y=0;//如果行地址超出范围就回到0行
CS1=1;//左右屏都使能,写下相同的行地址
CS2=1;
ks0108rs0(y+184);//写页(行)地址,共有8页,第0页地址是184
if(x<64)//写列地址,共有64列,第0列地址是64
{CS1=1;CS2=0;ks0108rs0(x+64);}
else
{CS1=0;CS2=1;ks0108rs0(x);};
ks0108x=x;//记住列/行地址
ks0108y=y;
}

voidks0108cls(void)//清屏,光标回到左半屏左上角
{
unsignedchari0,i1;
CS1=1;//左/右屏都使能
CS2=1;
ks0108rs0(63);//打开显示
ks0108rs0(64);//列地址回到0
for(i0=0;i0<8;i0++)//页地址由7变到0
{
ks0108rs0(191-i0);
for(i1=0;i1<64;i1++)//对某一行全写入0
{
E=1;RS=1;RW=0;
DATA=0;
E=0;
delay_ms(1);
}
}
CS2=0;
ks0108x=0;
ks0108y=0;
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2025年9月5日 /美通社/ -- 由上海市经济和信息化委员会、上海市发展和改革委员会、上海市商务委员会、上海市教育委员会、上海市科学技术委员会指导,东浩兰生(集团)有限公司主办,东浩兰生会展集团上海工业商务展览有...

关键字: 电子 BSP 芯片 自动驾驶

9月1日消息,继小鹏、零跑后,现在小米汽车也宣布了8月的交付量。

关键字: 小米汽车 芯片

当地时间 8 月 22 日,美国芯片制造商英特尔公司宣布与美国联邦政府达成协议,后者将向英特尔普通股投资 89 亿美元,以每股 20.47 美元的价格收购 4.333 亿股英特尔普通股,相当于该公司 9.9% 的股份。

关键字: 英特尔 半导体 芯片

在当今数字化时代,人工智能(AI)和高性能计算(HPC)的迅猛发展对 GPU 芯片的性能提出了极高要求。随着 GPU 计算密度和功耗的不断攀升,散热问题成为了制约其性能发挥的关键因素。传统的风冷方案已难以满足日益增长的散...

关键字: 人工智能 高性能计算 芯片

8月20日消息,博主数码闲聊站暗示,9月底大概率只有小米16系列会亮相,其它骁龙8 Elite 2旗舰、天玑9500旗舰新品都将排到10月份,新机大乱斗会在国庆假期之后开始。

关键字: 小米雷军 芯片

8月21日消息,据媒体报道,英伟达宣布将自研基于3nm工艺的HBM内存Base Die,预计于2027年下半年进入小规模试产阶段,此举旨在弥补其在HBM领域的技术与生态短板。

关键字: 英伟达 黄仁勋 芯片 显卡

继寻求收购英特尔10%的股份之后,近日又有消息称,特朗普政府正在考虑通过《芯片法案》资金置换股权的方式,强行收购美光、三星、台积电三大芯片巨头的股份。若此举落地,美国政府将从“政策扶持者”蜕变为“直接股东”,彻底重塑全球...

关键字: 芯片 半导体

在集成电路设计流程中,网表作为连接逻辑设计与物理实现的关键桥梁,其分模块面积统计对于芯片性能优化、成本控制和资源分配具有重要意义。本文将详细介绍如何利用 Python 实现网表分模块统计面积的功能,从网表数据解析到面积计...

关键字: 网表 芯片 分模块

8月19日消息,封禁4个多月的H20为何突然又被允许对华销售,这其实是美国设计好的。

关键字: 英伟达 黄仁勋 芯片 显卡

8月17日消息,美国对全球挥舞关税大棒,已经开始影响各个行业的发展,最新的就是半导体产业,总统更是放话要把关税加到300%。

关键字: 芯片 英伟达
关闭