代码崩溃!!!
- /*****************************************************************************
- *版权信息:深圳天微电子有限公司
- *文 件 名:TM1621D-V1.0
- *当前版本:V1.0
- *MCU 型号:STC12C5608AD
- *开发环境:Keil uVision4
- *晶震频率:11.0592MHZ
- *完成日期:2013-08-07
- *程序功能:1.LCD驱动:LCD屏所接SEG显示0~5
- *免责声明:1.此程序为TM1621D驱动LCD演示程序,仅作参考之用。
- 2.如有直接使用本例程程序造成经济损失的,本公司不承担任何责任
- ********************************************************************************/
- #include <COMM/STC8H.h> //MCU头文件
- #include "intrins.h" //包含nop指令头文件
-
- #define uchar unsigned char //数据类型宏定义
- #define uint unsigned int //数据类型宏定义
-
- #define nop _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_(); //宏定义
-
-
- /******************TM1621D模块命令定义*********************/
- #define SYSDIS 0x00 //关系统振荡器和LCD偏压发生器
- #define SYSEN 0x02 //打开系统振荡器
-
- #define LCDOFF 0x04 //关LCD偏压
- #define LCDON 0x06 //开LCD偏压
-
- #define RC 0x30 //内部RC振荡
-
- #define BIAS 0x52 //1/3偏压 4公共口
-
- /********************定义控制端口**********************/
- sbit CS=P1^7;
- sbit WRITE=P1^5;
- sbit DATA=P1^6;
-
- /********************定义数据*************************/
- uchar code Smg[16]={0xeb,0x60,0xc7,0xE5,0x6C,0xAD,0xaf,0xE0,0xef,0xed,0xee,0x2f,0x8b,0x67,0x8f,0x8e}; //0~F字型码
-
- uchar code Tab0[16]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; //清屏
-
-
- /********************延时函数*************************/
- void delay_nms(uint n)
- {
- uint i;
- while(n--)
- for(i=0;i<500;i++);
- }
-
- /********************从高位写入数据*************************/
- void Write_Data_H(uchar Data, uchar Cnt) //Data的高cnt位写入TM1621D,高位在前
- {
- uchar i;
- for(i=0;i<Cnt;i++)
- {
- WRITE=0;
- if(Data&0x80) //从最高位发送
- DATA=1;
- else
- DATA=0;
- nop;
- nop;
- WRITE=1;
- Data<<=1;
- }
- WRITE=0;
- DATA=0;
- }
-
- /********************从低位写入数据*************************/
- void Write_Data_L(uchar Data,uchar Cnt) //Data 的低cnt位写入TM1621D,低位在前
- {
- unsigned char i;
- for(i=0;i<Cnt;i++)
- {
- WRITE=0;
- if(Data&0x01) //从低位发送
- DATA=1;
- else
- DATA=0;
- nop;
- nop;
- WRITE=1;
- Data>>=1;
- }
- WRITE=0;
- DATA=0;
- }
-
- /********************写入控制命令*************************/
- void WriteCmd(uchar Cmd)
- {
- CS=0;
- nop;
- Write_Data_H(0x80,4); //写入命令标志100
- Write_Data_H(Cmd,8); //写入命令数据
- CS=1;
- nop;
- }
-
- /*********指定地址写入数据,实际写入后4位************/
- void WriteOneData(uchar Addr, uchar Data)
- {
- CS=0;
- Write_Data_H(0xa0,3); //写入数据标志101
- Write_Data_H(Addr<<2,6); //写入地址数据
- Write_Data_L(Data,4); //写入数据
- CS=1;
- nop;
- }
-
- /*********连续写入方式,每次数据为8位,写入数据************/
- void WriteAllData(uchar Addr,uchar *p,uchar cnt)
- {
- uchar i;
- CS=0;
- Write_Data_H(0xa0,3); //写入数据标志101
- Write_Data_H(Addr<<2,6); //写入地址数据
- for(i=0;i<cnt;i++) //写入数据
- {
- Write_Data_L(*p,8);
- p++;
- }
- CS=1;
- nop;
- }
-
- /*******************TM1621D初始化**********************/
- void TM1621D_init()
- {
- CS=1;
- WRITE=1;
- DATA=1;
- nop;
- delay_nms(1);
- WriteCmd(BIAS); //1/3偏压 4公共口
- WriteCmd(RC); //内部RC振荡
- WriteCmd(SYSDIS); //关系统振荡器和LCD偏压发生器
- WriteCmd(SYSEN); //打开系统振荡器
- WriteCmd(LCDON); //开LCD偏压
- }
-
- void main()
- {
- P1M0 &= ~0xe0; P1M1 &= ~0xe0; // P1.5 1.6 1.7 准双向口用于操作1621
-
-
-
-
-
-
-
-
-
-
-
-
-
- TM1621D_init(); //开机初始化
- delay_nms(1);
- WriteAllData(0,Tab0,16); //LCD清显存
- while(1)
- {
- WriteAllData(0xF8,Smg,0xAA); //LCD SEG10到SEG21显示0~5
-
- }
- }
-
-
-
-
-
-
复制代码
|