桂林电子科技大学毕业设计(论文)报告用纸 第 42 页 共 54 页
uchar LCD_Code[] =\
/******************************LCD1602驱动程序*************************************/
void lcd_delay(uchar delaytime) { }
void write_lcd_command(uchar write_command) { } { }
lcd_delay(40); RS=0; RW=0;
LCDPORT=write_command; EN=1; EN=0;
while(delaytime)delaytime--;
void write_lcd_data(uchar write_data)
lcd_delay(40); RS=1; RW=0;
LCDPORT=write_data; EN=1; EN=0;
void Display_One_Char( uchar x,uchar y,uchar dat) //x表示行,y表示列 {
switch(x) {
case 0: write_lcd_command(0x80+y); break; case 1: write_lcd_command(0xc0+y); }
break;
write_lcd_data(dat); }
void Display_List_Char(uchar x,uchar y,uchar *str) {
桂林电子科技大学毕业设计(论文)报告用纸 第 43 页 共 54 页
switch(x) {
case 0:
write_lcd_command(0x80+y); break;
case 1: write_lcd_command(0xc0+y); }
while (*str!='\\0') { }
write_lcd_data(*str); str++; break;
}
void xs_int(unsigned int shuju,bit t) //显示一个数字 {unsigned char huancun[6]={0}; unsigned char biaozhi=0,i; if (shuju < 10) biaozhi = 1; else if(shuju < 100) biaozhi = 2; else if(shuju < 1000) biaozhi = 3; else if(shuju < 10000) biaozhi = 4; else if(shuju < 65535) biaozhi = 5; switch(biaozhi)
{case 5:huancun[5] = shuju/10000; case 4:huancun[3] = shuju000/1000; case 3:huancun[2] = shuju00/100; case 2:huancun[1] = shuju0/10; case 1:huancun[0] = shuju; break;
default:break; }
for(i=6;i>1;i--)
{if(i==5)Display_One_Char(1,10,'.');
else Display_One_Char(t,15-i,0x30+huancun[i-1]); } Display_One_Char(t,15,'V'); }
void initial_lcd1602(void) {
//初始化LCD1602
uchar i; EN=0;
桂林电子科技大学毕业设计(论文)报告用纸 第 44 页 共 54 页
for(i=200;i>0;i--) lcd_delay(248);
write_lcd_command(0x38);
//0x38命令,双行显示,显示5x7的点阵字符
for(i=4;i>0;i--) lcd_delay(248); write_lcd_command(0x38); 符 }
for(i=4;i>0;i--)
lcd_delay(248);
write_lcd_command(0x0c); for(i=4;i>0;i--) lcd_delay(248);
write_lcd_command(0x06); for(i=4;i>0;i--)
lcd_delay(248);
write_lcd_command(0x01); for(i=4;i>0;i--) lcd_delay(248);
//再写一次0x38命令,双行显示,显示5x7的点阵字
//无光标,不闪烁
//光标右移,文字不移动
//清屏
四:AD转换程序
#include\
#include
//******************adc0832****************************// sbit CS=P3^1; //使能。 sbit CLK=P3^2;//时钟 sbit Do=P3^3; // 数据输出 sbit Di=P3^3;//数据输入
unsigned char CH=0x02;
//通道的选择:0x02就是单通道0;0x03就是单通道1; //0x00就是双通道ch0=“+”; ch0=“-” //0x01就是双通道ch0=“-”; ch0=“+”
//*****************************************************// unsigned char ADconv(void) {unsigned char i;
unsigned int data_f=0,data_c=0; Di=1; CS=1;
_nop_(); CS=0;
Di=1; ;//芯片使能之前的初始化。第一个下降沿 CLK=1; _nop_();
桂林电子科技大学毕业设计(论文)报告用纸 第 45 页 共 54 页
_nop_();
/****************************************/ CLK=0; // 确定通道模式、第2个下降沿 _nop_(); _nop_();
CLK=1;
Di=(bit)(0x02&CH); //设定通道初始化 _nop_(); CLK=0; _nop_();
_nop_(); CLK=1;
Di=(bit)(0x01&CH); //设定通道初始化 .第3个下降沿 _nop_();
_nop_();
CLK=0; //AD转化的初始化完成。 Di=1; CLK=1; _nop_(); _nop_(); CLK=0; _nop_(); CLK=1;
for(i=8;i>0;i--)//得到一个正常排序的8位数据 { data_f|=Do; data_f<<=1; CLK=1; _nop_(); _nop_(); CLK=0; _nop_();
}
for(i=8;i>0;i--)//得到一个反序排列的8位数据 {
data_c<<=1; data_c|=Do; _nop_(); CLK=1; _nop_(); _nop_(); CLK=0;
桂林电子科技大学毕业设计(论文)报告用纸 第 46 页 共 54 页
_nop_(); }
CLK=0; _nop_(); _nop_(); CLK=1; _nop_(); _nop_();
CLK=0; _nop_(); _nop_(); CLK=1; _nop_(); CS=1; _nop_(); _nop_(); return data_f; }
五:时钟程序
#include
sbit DS1302_CLK = P3^5; sbit DS1302_IO = P3^6; sbit DS1302_RST = P3^7;
uchar lcd_dat[]={\ 6\
uchar lcd_time[]={\
uchar wr_data[8]={0x09,0x09,0x26,0x06,0x22,0x59,0x50}; uchar readtimeR[8]; void delays(uint n) {
while(n--);
}
/***************************************************************************** 函数功能:写DS1302一个字节子程序 入口参数: