飞思卡尔智能车的数据采集(CCD摄像头)程序,舵机,电机控制程序
飞思卡尔智能车技术报告

第六届“飞思卡尔”杯全国大学生智能汽车邀请赛技术报告学校:队伍名称:参赛队员:带队教师:关于技术报告和研究论文使用授权的说明本人完全了解第六届“飞思卡尔”杯全国大学生智能汽车邀请赛关保留、使用技术报告和研究论文的规定,即:参赛作品著作权归参赛者本人,比赛组委会和飞思卡尔半导体公司可以在相关主页上收录并公开参赛作品的设计方案、技术报告以及参赛模型车的视频、图像资料,并将相关内容编纂收录在组委会出版论文集中。
参赛队员签名:带队教师签名:日期:摘要随着现代科技的飞速发展,人们对智能化的要求已越来越高,而智能化在汽车相关产业上的应用最典型的例子就是汽车电子行业,汽车的电子化程度则被看作是衡量现代汽车水平的重要标志。
同时,汽车生产商推出越来越智能的汽车,来满足各种各样的市场需求。
本文以第六届全国大学生智能车竞赛为背景,主要介绍了智能车控制系统的机械及硬软件结构和开发流程。
机械硬件方面,采用组委会规定的标准 A 车模,以飞思卡尔半导体公司生产的80管脚16 位单片机MC9S12XS128MAA 为控制核心,其他功能模块进行辅助,包括:摄像头数据采集模块、电源管理模块、电机驱动模块、测速模块以及无线调试模块等,来完成智能车的硬件设计。
软件方面,我们在CodeWarrior IDE 开发环境中进行系统编程,使用增量式PD 算法控制舵机,使用位置式PID 算法控制电机,从而达到控制小车自主行驶的目的。
另外文章对滤波去噪算法,黑线提取算法,起止线识别等也进行了介绍。
关键字:智能车摄像头图像处理简单算法闭环控制无线调试第一章引言飞思卡尔公司作为全球最大的汽车电子半导体供应商,一直致力于为汽车电子系统提供全范围应用的单片机、模拟器件和传感器等器件产品和解决方案。
飞思卡尔公司在汽车电子的半导体器件市场拥有领先的地位并不断赢得客户的认可和信任。
其中在8 位、16 位及32 位汽车微控制器的市场占有率居于全球第一。
飞思卡尔公司生产的S12 是一个非常成功的芯片系列,在全球以及中国范围内被广泛应用于各种汽车电子应用中。
飞思卡尔智能车摄像头组新手指南(5)--让车跑起来篇

飞思卡尔智能车摄像头组新⼿指南(5)--让车跑起来篇舵机、电机控制策略让车跑起来彭岸辉控制器设置了快速的控制周期,在每个运算周期内,控制器即时地得到智能车车速以及传感器采样来的道路信号,经过控制算法的计算后,控制单元输出相应的前轮控制转⾓以及电机占空⽐的值,其输出值再经过函数映射关系转换为 PWM 脉宽信号传⾄前轮舵机以及驱动电机,从⽽实现⼀个周期的控制。
由于摄像头的信号是具有周期性的,可以直接采⽤摄像头采集⼀幅图像的周期作为控制周期。
舵机控制采⽤ PD 控制,控制跟随性较好,P可以及时对赛道的变化作出反应,当然舵机的 P 项值也是跟随赛道情况变化的,直道和较⼩的弯道时控制较弱,90 度弯道或 270 度⼤弯道控制量较强,D有预测道路类型的作⽤,也就是能使舵机提前打⾓。
电机控制采⽤ PID 控制,可以减⼩动态误差并且跟随性能较好。
当然也可以使⽤其他控制,很多⼈舵机采⽤P控制,电机采⽤PD或PI控制。
对⽐他们的优缺点⾃⼰选择适合⾃⼰⼩车的PID。
这⾥不进⾏深⼊讲解。
前⾯的⼯作完成后懂得基本的图像处理算法就差不多可以使⼩车跑起来了!要使⼩车跑起来其实不难的,很多初学者最希望的就是看⾃⼰的车跑起来,因为当初我也是这样的,很理解师弟师妹们此刻的想法!最基本的图像处理算法就是:图像中间往两边搜索⿊线注意:初学者在初学时不知道偏差是怎样计算的。
这⾥就提⼀下:偏差就是计算出的中线即图中赛道中的⿊线与摄像头所看到的中线即图中赛道中的竖直红线(例如采集到的图像是100列的,那么摄像头看到的中线就是50)做差得到的值就是偏差。
它表⽰车当前位置与期望位置的偏离程度。
再看个图吧:⽤两⾏来说明,其他的⼀样。
第⼀⾏左边坐标(0,1)右边坐标(0,99),得出的中线就是(0,50),那么50所在的那⼀列就是摄像头所看到的中线(就是图中竖直的红线)。
这⾥再提⼀下,很多⼈提出中线后发现上位机上或LCD上没显⽰出中线,其实显⽰出中线很简单的:根据RGB,⼀个像素点的像素值为255时显⽰出来的是⽩⾊,像素值为0时显⽰出来的是⿊⾊。
飞思卡尔智能车信息采集

飞思卡尔智能车信息采集摘要本文首先对智能车的硬件进行设计,达到了低重心、大前瞻、高稳定性。
其次对系统的软件部分进行设计,利用阀值对赛道进行判断,从而得到智能车的偏航角。
综合偏航角控制量实现舵机控制,入弯道切内道,大大提高了智能车的弯道运行速度。
用光电编码盘检测智能车的运行速度,再根据赛道信息给定智能车的运行速度,运用一些算法调节驱动电机转速,实现了电机的快速响应。
经过大量测试,最终确定系统结构和各项控制参数。
关键词:单片机;舵机控制;速度控制【中图分类号】u293.2+50 引言智能车有着极为广泛的应用前景。
结合传感器技术和自动驾驶技术可以实现汽车的自适巡航并把车开得开得又快又稳、安全可靠;汽车夜间行驶时,如果装上红外摄像头,就能实现夜晚汽车的安全辅助驾驶;他也可以工作在仓库、码头、工厂或危险、有毒、有害的工作环境里,此外他还能担当起无人值守的巡逻监视、物料的运输、消防灭火等任务。
在普通家庭轿车消费中,智能车的研发也是有价值的,比如雾天能见度差,人工驾驶经常发生碰撞,如果用上这种设备,激光雷达会自动探测前方的障碍物,电脑会控制车辆自动停下来撞车就不会发生了。
提高安全性和系统效率。
这种新型车辆控制方法的核心,就是实现车辆的智能化。
1 智能车机械结构设计机械结构是控制算法和软件程序的执行机构,对机械结构性能的了解和改造有利于对控制算法和软件程序的实现。
因此对车体机械结构的调整是非常必要的。
1.1 车体机械参数调整前轮参数的调整包括前轮主销后倾角,主销内倾角,前轮外倾角,前轮前束。
这几个参数对车体直线行驶的平稳性和转弯的灵活性有很重要的影响[1]。
1.2 舵机的安装舵机转向是整个控制系统中延迟较大的一个环节,在相同的舵机转向条件下,转向连杆在舵机一端的连接点离舵机轴心距离越远,转向轮转向变化越快。
这样安装的优点是:改变了舵机的力臂,使转向更灵敏;舵机安装在正中央,使左右的转向基本一致;重心相对来说靠后,减轻舵机的负载[2]。
飞思卡尔摄像头智能车及无人驾驶车辆设想

TECHNOLOGY WIND[摘要]在我们摄像头组硬软件的互相配合中,我们对未来机车实现无人驾驶有了很多想法。
智能车以freescale16位的单片机XS128作为核心控制处理器,相当于人脑;CCD 摄像头识别黑白俩色图像进行赛道边沿采集图像智能循迹,相当于人眼;采用PID 控制策略实现对采集回的图像类型即黑线的走势来判断从而调整舵机的打向和电机的转速,以实现智能车快速而平稳的寻线行驶,相当于人脑对于真实路径的方向处理和速度调整产生的策略;摄像头识别终止线并立刻做出停止反应,相当于真实机车通行时遇到必要的停止信号如红绿灯或行人等障碍物做出的即时反应。
[关键词]智能车;PID 算法;CCD 摄像头;XS128;无人驾驶飞思卡尔摄像头智能车及无人驾驶车辆设想付辉韩国宏赵皓(西南科技大学信息工程学院,四川绵阳621000)1布局架构1.1布局关键点如下摄像头置于车模后方,采用强度高质量轻的支架,并将摄像头置于距离车模底板30厘米左右处,与水平线的倾角约为47.57度,尽量减少赛车前方盲区,使舵机架高并直立安装,延长力臂以提高舵机的灵敏度,将主板,电池,电机置于同一平面放于车模,降低车底板的重心。
1.2车体构造原则在硬件安装上本着降低中心为基本原则,在摄像头和传感器的安装上本着视野范围宽而车体的距离短。
在一些小的机械细节上可以产生失之毫厘谬以千里的影响,如我们对车轮螺丝的松紧程度做了一定的调整,电机高速运转是产生的噪音就没有之前的强烈。
2硬件系统2.1摄像头摄像头作为智能车单片机、电机、舵机、电源、轮胎并驾齐驱的五宝之一,它的存在就是车子的灵魂可谓神来之笔。
车体的控制方法都基于摄像头对于赛道黑线的提取,而摄像头正是图像信息的唯一入口,对采集到的道路信息进行分析处理,利用PID 算法实现对小车行进的控制。
本队采用CCD 摄像头,灵敏度和动态图像显示较CMOS 数字摄像头更为理想,但功耗大,工作电压电流高。
飞思卡尔智能车摄像头组技术报告 (2)

第十届“飞思卡尔”杯全国大学生智能汽车竞赛技术报告摘要本文设计的智能车系统以K60微控制器为核心控制单元,基于CCD摄像头的图像采样获取赛道图像信息,提取赛道中心线,计算出小车与黑线间的位置偏差,采用PD方式对舵机转向进行反馈控制。
使用PID控制算法调节驱动电机的转速,结合特定算法分析出前方赛道信息实现对模型车运动速度的闭环控制。
为了提高模型车的速度和稳定性,我们用C++开发了仿真平台、蓝牙串口模块、SD卡模块、键盘液晶模块等调试工具,通过一系列的调试,证明该系统设计方案是确实可行的。
关键词:K60,CCD摄像头,二值化,PID控制,C++仿真,SD卡AbstractIn this paper, we will design a intelligent vehicle system based on MC56F8366 as the micro-controller unit. using the CCD image sensor sampling to the track image information to extract the track line center, to calculate the positional deviation between the car with the black line, the use of PD on the rudder. The machine turned to the feedback control. We use PID control algorithm to adjust the speed of the drive motor, combined with specific algorithms to achieve closed-loop control of the movement speed of the model car in front of the track. In order to improve the speed and stability of the model car, we use the C++ to develop a simulation platform, Bluetooth serial module, SD card module, keyboard, LCD modules, debugging tools. Through a series of debugging, the system design is feasible.Key words: K60,CCD_camera, binaryzation, PID control, C++ simulation, SD card目录第1章引言................................................................................... - 1 - 第2章系统总体设计................................................................ - 2 - 2.1 系统分析..................................................................................... - 2 - 2.2 车模整体布局............................................................................. - 3 - 2.3 本章小结....................................................................................... - 4 - 第3章系统机械设计及实现................................................... - 5 - 3.1 前轮定位的调整......................................................................... - 5 -3.1.1主销内倾..............................................................................- 6 -3.1.2 后倾角.................................................................................- 6 -3.1.3 内倾角.................................................................................- 7 - 3.2 舵机安装....................................................................................... - 8 -3.2.1 左右不对称问题的发现与解决........................................- 10 - 3.3 编码器的安装............................................................................ - 10 - 3.4 摄像头安装.................................................................................- 11 -3.4.1 偏振镜的使用......................................................................- 12 -3.4.2 摄像头的标定......................................................................- 12 - 3.5 摄像头的选用.............................................................................- 13 - 3.6 红外接收装置.............................................................................- 14 -3.7 防止静电复位.............................................................................- 15 - 3.8 本章小结.......................................................................................- 15 - 第4章硬件电路系统设计及实现 ...................................... - 16 -4.1 硬件设计方案............................................................................- 16 - 4.2 电源稳压......................................................................................- 17 - 4.3 电机驱动......................................................................................- 18 - 4.4 图像处理部分............................................................................- 19 -4.4.1 摄像头升压电路.............................................................- 19 -4.4.2 视频分离电路.................................................................- 19 -4.4.3 硬件二值化.....................................................................- 19 - 4.5 灯塔电路......................................................................................- 21 - 4.6 本章小结......................................................................................- 21 -第5章系统软件设计.............................................................. - 22 -5.1 软件流程图...............................................................................- 22 - 5.2 算法新思路...............................................................................- 23 -5.2.1中心线提取.......................................................................- 23 -5.2.2 直角检测........................................................................... - 24 -5.2.3 单线检测......................................................................... - 24 - 5.3 舵机控制.....................................................................................- 25 - 5.4 速度控制.....................................................................................- 26 - 5.5 PID算法....................................................................................- 26 - 5.6 路径优化.....................................................................................- 31 -第6章系统联调...................................................................... - 33 - 6.1 开发工具.................................................................................... - 33 - 6.2 无线调试蓝牙模块及蓝牙上位机..........................................- 33 - 6.3 键盘加液晶调试......................................................................- 34 - 6.4 TF卡调试模块.........................................................................- 34 -6.4.1 TF卡.............................................................................- 34-6.4.2 SDCH卡 .........................................................................- 35 -6.4.3 软件实现.......................................................................- 36 - 6.5 C++上位机设计........................................................................- 36 - 6.6 电源放电模块...........................................................................- 38-6.6.1 镍镉电池记忆效应…………………………………….. - 39-6.6.2 放电及电池性能检测设备…………………………….. - 39- 6.7 本章小结....................................................................................- 40 - 第7章模型车技术参数........................................................ - 41 - 第8章总结............................................................................... - 42 - 参考文献...................................................................................... - 44 -第1章引言在半导体技术日渐发展的今天,电子技术在汽车中的应用越来广泛,汽车智能化已成为行业发展的必然趋势。
飞卡知识竞赛题目

山东大学(威海)飞思卡尔知识竞赛初赛试题(样题)姓名:年级:学号:手机号:一填空题(每空2分,共22分)(1)HCS12微控制的工作电压为()(2)飞思卡尔智能车竞赛最初起源于哪个国家()(3)摄像头组一般使用的摄像头是CCD和()(4)第七届全国飞思卡尔智能车山东赛区在哪个学校举办()(5)飞思卡尔智能车赛要求使用的传感器不能超过()个(6)伺服电机不超过几个()(7)PWM即()(8)第八届全国飞思卡尔智能车赛中电磁组中如果选用陀螺仪,则必须选择()公司的()系列的陀螺仪。
(两空可选答一空,如果两空均答对则得4分但本题最多不超过20分)(9)AD转换中A表示的是()信号,D表示的是()信号。
(10)如果有一车模通过连续扫描赛道反射点的方式进行路径检测的属于()组车模。
二选择题(每题2分,共20分)(请勿在A、B、C、D上打勾否则不得分)1、以下学校中哪所学校是第七届飞思卡尔智能车全国总决赛举办地()A.南京师范大学B.北京科技大学C.常熟理工学院D.杭州电子科技大学2、请问CCD摄像头的额定工作电压是()A.3.3VB.5VC.7.2VD.12V3、程序的灵魂是()A.算法B.函数C.数据结构D.表达式4、以下哪种软件是用来绘制PCB(电路板)的?()A. KeilB.ProteusC.Visual C++D.Altium Designer5、请问二进制数100101011110011110是()A.奇数B.偶数6、请把十六进制数5A1D转化为二进制()A.1000100011000110B.110101********* C101101001011101 D.1011010000111017、飞思卡尔是()制造商。
A.汽车B.半导体C.汽车芯片D.手机8、第六届与第七届比赛规则变动最大的是以下哪个组()A.摄像头组B.光电组C.电磁组D.光电平衡组9、第七届比赛规则中要求摄像头组用()车模,光电组用()车模,电磁组用()车模。
飞思卡尔智能车原理

飞思卡尔智能车原理飞思卡尔智能车是一种基于嵌入式系统和人工智能技术的智能交通工具。
它通过搭载各种传感器、控制器和算法,在无人驾驶、自动泊车等场景下发挥重要作用。
本文将介绍飞思卡尔智能车的原理,并分析其在实际应用中的优势和挑战。
一、飞思卡尔智能车的硬件组成飞思卡尔智能车的硬件组成主要包括以下几个方面:1. 主控单元:主控单元是飞思卡尔智能车的核心组件,通常采用高性能的嵌入式处理器。
它负责接收来自各种传感器的信息,并根据预设的算法进行数据处理和决策。
2. 传感器:飞思卡尔智能车搭载多种传感器,如摄像头、激光雷达、超声波传感器等。
这些传感器可以实时感知周围环境的信息,包括道路状况、障碍物位置等,为智能车提供必要的数据支持。
3. 电机与驱动系统:飞思卡尔智能车搭载电机和对应的驱动系统,用于控制车辆的行驶和转向。
这些系统通常采用先进的电子控制技术,能够实现精确的转向和速度控制。
4. 通信模块:飞思卡尔智能车通过通信模块与其他车辆、交通基础设施等进行信息交互。
这种通信方式可以实现车辆之间的协同工作,提高交通系统的整体效率。
二、飞思卡尔智能车的工作原理飞思卡尔智能车的工作原理可以归结为以下几个关键步骤:1. 环境感知:飞思卡尔智能车通过搭载的传感器对周围环境进行感知。
摄像头可以捕捉到道路状况、交通标志和其他车辆的信息;激光雷达可以检测到障碍物的位置和距离;超声波传感器可以测量车辆与前方障碍物的距离等。
通过这些传感器获取到的数据,智能车可以对周围环境做出准确判断。
2. 数据处理与决策:主控单元接收传感器传来的数据,并根据预设的算法进行数据处理和决策。
它会将传感器的信息与事先建立的模型进行比对,进而判断车辆应该采取何种动作,如加速、刹车、转向等。
3. 控制指令生成:基于数据处理与决策的结果,主控单元生成相应的控制指令,通过驱动系统控制车辆的行驶和转向。
这些控制指令可以通过电机和驱动系统精确地控制车辆的运动。
4. 数据通信与协同:飞思卡尔智能车通过通信模块与其他车辆以及交通基础设施进行信息交互。
基于CCD图像识别的HCS12单片机智能车控制系统_刘建刚

光电 技术 应用
ELECT R O- OPT IC T ECHN OL OGY A PPL ICA T ION
Vol. 22, No. 6 December . 2007
文章编号: 1673- 1255( 2007) 06- 0052- 04
基于 CCD 图像识别的 H CS12 单片机智能车控制系统
的光电传感器识别路径方案, 该摄像头传感器 可以获取更多的路径信息, 使智能 车按任意 给定的黑色 引导线更 能以较快的 速
度平稳地运行.
关键词: 图像识别; 智能车; HCS12 单片机; CCD
中图分类号: TP212. 9
文献标识码: A
Design of Smartcar. s HCS12 MCU Control System Based on CCD Image Recognition
1 检测前瞻距离远 2 检测范围宽
3 检测道路参数多 4 占用 M CU 端口 资源少
1 电路相对设计复杂 2 检测信息更新速度慢 3 软件处理数据较多
2 主要电路模块设计
2. 1 CCD 路径识别电路
摄像 头的 主要 工作 原理 是[ 2] : 按一 定 的分 辨 率, 以隔行扫描的方式采样图像上的点, 当扫描到某 点时, 就通过图像传感芯片将该点处图像的灰度转 换成与灰度成一一对应关系的电压值, 然后将此电 压值通过视频信号端输出. 具体参见图 1. 当摄像头 扫描完一行, 视频信号端就输出有一个电压/ 凹槽0, 并保持一段时间, 此/ 凹槽0叫做行同步脉冲, 它是扫 描换行的标志. 然后, 跳过一行后, 开始扫描新的一 行, 如此下去, 直到扫描完该场的视频信号, 接着就 会出现一段场消隐区. 在这若干个消隐脉冲中, 有个 脉冲远宽于其他的消隐脉冲, 该消隐脉冲即称为场 同步脉冲, 它是扫描换 场的标志. 摄像头每秒 扫描 25 幅图像, 每幅又分奇、偶 2 场, 先奇场后偶场, 故 每秒扫描 50 场图像. 即扫描周期为 20 ms.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
************************************************************************************ Test.c* Description: This file includes I/ O function for test, the PWM outputs function for test, function* testing sensors.* (c) Copyright 2006,Zhao Cheng* All Rights Reserved** By : Zhao Cheng* Note : Don't change this file if possible.**********************************************************************************/#include <hidef.h>#include <mc9s12dg128.h>#define HIGHSPEED 8000#define LOWSPEED 11000 /* 速度变量,0-24000 数值越大,速度越慢*/void PWMout(int, int);/* 24000-20000 */void IOtest(void){static unsigned char i=0,j=0x01,k;DDRB = DDRA = 0xFF;PORTB = 0xf0;for(;;){k=(~j)&0x7f;PORTA = PORTB = k; while (TCNT != 0x0000); while (TCNT == 0x0000) {if(i>9){j=j<<1;i=0;}i++;}if(j>=0x80)j=0x01;}}void PWMtest(void) {int counter=-4500;DDRB = 0xff;PORTB = 0xff;TSCR1 = 0x80; /* enable timer TCNT */ TSCR2 = 0x00; /* TCNT prescaler setup */ for(;;){while (TCNT != 0x0000);while (TCNT == 0x0000);counter=counter+30;if(counter >= 3000){counter = 0;PWMout(4500, LOWSPEED);}if(counter == 1500){PWMout(-4500, LOWSPEED);}PORTB = (char)(counter/100);}}void SignalTest(void){unsigned char signal;int Direction, Velocity; Direction = 0;Velocity = LOWSPEED; DDRA = 0x00;DDRB = 0xff;signal = PORTA;PORTB = ~signal;switch(signal){case 0x08: /* 0001 1000 */ case 0x10:Direction = 800;Velocity = HIGHSPEED; break;case 0x04: /* 0010 0100 */ case 0x20:Direction = 1500; Velocity = HIGHSPEED;break;case 0x02: /* 0100 0010 */case 0x40:Direction = 2800;Velocity = HIGHSPEED;break;case 0x01: /* 1000 0001 */case 0x80:Direction = 4000;Velocity = LOWSPEED;break;case 0x3c: /* 0011 1100 over start line */case 0xff: /* 1111 1111 over crossing line */case 0x00: /* 0000 0000 go straight not need changed state */ default:break;}if(signal > 0x0f)Direction = -Direction;PWMout(Direction, LOWSPEED);}/************************************************************************************ * LCD1620.c* ICC-AVR application builder : 2006-1-8 21:43:48* Target : M8* Crystal: 4.0000Mhz** Note : Don't change this file if possible.**********************************************************************************/ #define CMD_CLEAR 0x01#define CMD_RESET 0x02#include <iom8v.h>#include <macros.h>#define LCD_DATA 0xff#define LCD_EN 0x01 //PORTC 0#define LCD_RS 0x02 //PORTC 1#define LCD_RW 0x04 //PORTC 2#define LCD_DATAPORT PORTB#define LCD_ENPORT PORTA#define LCD_RSPORT PORTA#define LCD_RWPORT PORTAvoid lcd_init(void);void lcd_write_cmd(unsigned cmd,unsigned data);void lcd_setxy(unsigned char x,unsigned char y);void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str); void delay_nus(unsigned int n);void delay_nms(unsigned int n);void lcd_init(void){DDRB |= LCD_DATA;DDRA |= LCD_EN | LCD_RS | LCD_RW;LCD_RWPORT&=~LCD_RW;LCD_DATAPORT=0x30; //控制字规则:5:8bit,4:16x2,3:5x7LCD_ENPORT|=LCD_EN;delay_nus(1);LCD_ENPORT&=~LCD_EN;delay_nus(40);lcd_write_cmd(0,0x38); //8bit testlcd_write_cmd(0,0x0c); //显示开lcd_write_cmd(0,0x01); //显示清屏lcd_write_cmd(0,0x06); //显示光标移动设置}void lcd_write_cmd(unsigned cmd,unsigned data) {if(cmd==0)LCD_RSPORT&=~LCD_RS;elseLCD_RSPORT|=LCD_RS;LCD_DATAPORT&=0x00;LCD_DATAPORT=data;LCD_ENPORT|=LCD_EN;delay_nus(10);LCD_ENPORT&=~LCD_EN;delay_nus(10);}void lcd_setxy(unsigned char x,unsigned char y) {unsigned char addr;if(y==0)addr=x+0x80;elseaddr=x+0xc0;lcd_write_cmd(0,addr);}void lcd_write_string(unsigned char X,unsigned char Y,unsigned char *str) {lcd_setxy(X,Y);while(*str){lcd_write_cmd(1,*str);str++;}}void delay_1us(void) //1us延时函数{asm("nop");}void delay_nus(unsigned int n) //N us延时函数{unsigned int i=0;for (i=0;i<n;i++)delay_1us();}void delay_1ms(void) //1ms延时函数{unsigned int i;for (i=0;i<1140;i++);}void delay_nms(unsigned int n) //N ms延时函数{unsigned int i=0;for (i=0;i<n;i++)delay_1ms();}//call this routine to initialize all peripheralsvoid main(void){lcd_init();while(1){lcd_write_cmd(0,0x01); //清屏delay_nms(2);lcd_write_string(0,0,"happy new year");delay_nms(100);lcd_write_string(0,1,"LCD successful!");delay_nms(100);}}/******************************* 程序结束*********************************/。